sql-server-2005 – 提供布尔结果的T-SQL过程
我正在努力使用T-SQL程序,我希望你能提供帮助.
我需要知道是否 >表中存在给定ID的行 因此,我们需要获取行的第一个表有两个相关的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. 解决方法我认为这个查询会做你想要的;请注意,您现有的查询存在一个错误,如果存在多个案例,它将仅检查初始查询选择的任何案例是否已关闭(当然,只有在可能有多个案例时才会出现这种情况)分配到特定位置).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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |