sql-server-2005 – 提供布尔结果的T-SQL过程

前端之家收集整理的这篇文章主要介绍了sql-server-2005 – 提供布尔结果的T-SQL过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力使用T-sql程序,我希望你能提供帮助.

我需要知道是否

>表中存在给定ID的行
>如果存在一个(或多个),则最新的一个将另一个ID设置为5.

因此,我们需要获取行的第一个表有两个相关的ID:CaseID和LocationID,这些都是整数.第二个表有一个名为StateID的相关ID.

目前我可以判断该行是否存在于表部分中,但是当我尝试执行任何操作时,Enterprise Manager会在END语句之前给出语法错误.

CREATE PROCEDURE [dbo].[HasActiveCase] 
(
    @LocationID INTEGER
)

AS

DECLARE @CaseID AS INTEGER
SELECT @CaseID=CaseID FROM dbo.Cases WHERE @LocationID=LocationID

SELECT CASE WHEN 
    @CaseID IS NULL 
THEN 
    0
ELSE  
    -- do something here to check CaseEvents.StateID is not 5 (closed)
END
GO

可能有一种方法可以在JOIN或其他东西中获得我需要的东西,但我在这里是一个完整的新手.

检查StateID最简单(理解)的方法不是5并将结果作为true / false返回? (我知道sqlServer没有布尔类型,但确实有Bit类型.)

另外在样式问题上:ID中的值具有与之关联的文本字段 – 例如,CaseEvents.StateID的文本为“已关闭”.我应该将值作为ID返回,然后替换代码中的ID或返回ID已经替换为文本的对象吗?在一组中永远不会有超过20或30个结果返回,并且该表永远不会非常大,因为花费5年才能获得2000个结果.

注意:不能使用linq(或任何其他.NETty),因为这将从VB6程序调用.

更新:

一次只能打开一个案例,因此只有最新的项目才有意义.

可能的情况是:

>没有案件开过.这应该返回0.
>案件先前已经开启,但现已关闭.这也应该返回0.
>存在已打开的案例.这应该返回1.

解决方法

我认为这个查询会做你想要的;请注意,您现有的查询存在一个错误,如果存在多个案例,它将仅检查初始查询选择的任何案例是否已关闭(当然,只有在可能有多个案例时才会出现这种情况)分配到特定位置).
SELECT @CaseID = dbo.Cases.CaseID
FROM dbo.Cases
    JOIN dbo.CaseEvents ON dbo.Cases.CaseEventID = dbo.CaseEvents.CaseEventID
WHERE @LocationID = dbo.Cases.LocationID
    AND 5 != dbo.CaseEvents.StateID

SELECT CASE WHEN @CaseID IS NULL THEN CAST(0 AS BIT) ELSE CAST(1 AS BIT) END AS CaseExists

猜你在找的MsSQL相关文章