gra*_*eds 6 t-sql sql-server-2005
我正在努力使用T-SQL程序,我希望你能提供帮助.
我需要知道是否
因此,我们需要获取行的第一个表有两个相关的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
Run Code Online (Sandbox Code Playgroud)
可能有一种方法可以在JOIN或其他东西中获得我需要的东西,但我在这里是一个完整的新手.
检查StateID最简单(理解)的方法不是5并将结果作为true/false返回?(我知道SQLServer没有布尔类型,但确实有Bit类型.)
另外在样式问题上:ID中的值具有与之关联的文本字段 - 例如,CaseEvents.StateID的文本为"已关闭".我应该将值作为ID返回,然后替换代码中的ID或返回ID已经替换为文本的对象吗?在一组中永远不会有超过20或30个结果返回,并且该表永远不会非常大,因为花费5年才能获得2000个结果.
注意:不能使用linq(或任何其他.NETty),因为这将从VB6程序调用.
更新:
一次只能打开一个案例,因此只有最新的项目才有意义.
可能的情况是:
我认为这个查询会做你想要的; 请注意,您现有的查询存在一个错误,如果存在多个案例,它将仅检查初始查询选择的任何案例是否已关闭(当然,只有在可能有多个案例时才会出现这种情况)分配到特定位置).
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8986 次 |
| 最近记录: |