我正在努力使用T-SQL過程,我希望你能提供幫助。給出布爾結果的T-SQL過程
我需要知道,如果
- 在表中存在一個給定的ID
- 如果一個(或多個)的行確實存在,那麼最新的一個有另一個ID設置爲5
因此,我們需要從第一個表中取出的表有兩個相關的ID:CaseID和LocationID,它們都是整數。第二個表有1個稱爲StateID的相關ID。
目前我可以得到該行是否存在於表部件中,但是當我試圖做任何事情時,企業管理器在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並將結果作爲真/假返回?(我知道SQLServer沒有布爾類型,但確實有位類型)
另外就樣式而言:ID中的值具有與它們關聯的文本字段 - CaseEvents.StateID具有例如文本「Closed」。 我是否應該將值作爲ID返回,然後替換代碼中的ID或返回ID已被文本替換的對象?一組中將不會有超過20或30個結果返回,並且該表將永遠不會非常大,因爲需要5年才能獲得2000個結果。
注意:不能使用LINQ(或任何其他的.NETTY),因爲這將從VB6程序調用。
更新:
僅1例可在同一時間所以只有最近的一個項目是相關的開放。
在可能的情況已經是:
- 沒有過的情況下打開。這應該返回0.
- 以前已打開一個案件,但現在已關閉。這也應該返回0.
- 存在已打開的案例。這應該返回1.
我得到一個錯誤156:關鍵字'BEGIN'附近的語法不正確。在關鍵字'THEN'附近有正確的語法。 – 2009-04-16 14:26:30
再次檢查,我更正了,更改了IF語法CASE語法 – 2009-04-16 14:35:04
但是,檢查Edoode的答案,這也是非常好的 – 2009-04-16 14:37:34