在我的表中,我有兩列
ClosedDate DateTime null
IsClosed bit null
如果@IsClosed的輸入值是真實的當前值IsClosed
null或假的話,我想更新的價值ClosedDate
要GetDate()
這樣
ClosedDate = GETDATE()
這是我嘗試過但不起作用的方法。
ALTER PROCEDURE[dbo].someProcedure
@IsClosed bit,
Update dbo.Foo
SET
//Other fields to be set
ClosedDate = CASE WHEN IsClosed = 0 OR IsClosed = NULL AND IsClosed <> @IsClosed THEN GETDATE() END,
IsClosed = @IsClosed
WHERE myId = @myId
我哪裡錯了?
CloseDate
如果不能改變則設置為自身,否則設置為 NULL。
UPDATE dbo.Foo
SET
ClosedDate = CASE WHEN ISNULL(IsClosed, 0) = 0 AND IsClosed <> @IsClosed
THEN GETDATE()
ELSE ClosedDate
END,
IsClosed = @IsClosed
WHERE myId = @myId
請注意,如果您只設置一列,或者如果兩列必須一起更新或不一起更新,您只需將所有條件添加到 WHERE 子句中。
UPDATE dbo.Foo
SET
ClosedDate = GETDATE()
IsClosed = @IsClosed
WHERE
myId = @myId AND
ISNULL(IsClosed, 0) = 0 AND
IsClosed <> @IsClosed
另外,不要測試IsClosed = 0 OR IsClosed = NULL
。由於 NULL 傳播,這不會按預期工作。ISNULL(IsClosed, 0) = 0
改為使用或COALESCE(IsClosed, 0) = 0
(我不確定 SQL-Server 2008 是否已經知道 ISNULL)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句