我試圖更改表並添加約束條件時,無法獲取SQL Server來解析我的查詢。像這樣:Alter表中的Case語句出錯
ALTER TABLE TaxVal
ADD CONSTRAINT ch_taxVal CHECK (CASE WHEN Col1 IS NOT NULL THEN Col2 = 1 ELSE 0 END)
我想根據col1的值或條件更新或設置col2的值。 我該怎麼做? 謝謝
我試圖更改表並添加約束條件時,無法獲取SQL Server來解析我的查詢。像這樣:Alter表中的Case語句出錯
ALTER TABLE TaxVal
ADD CONSTRAINT ch_taxVal CHECK (CASE WHEN Col1 IS NOT NULL THEN Col2 = 1 ELSE 0 END)
我想根據col1的值或條件更新或設置col2的值。 我該怎麼做? 謝謝
約束條件只強制執行有關您試圖添加或更改的數據的規則,但它們不會修改數據。你想要的最有可能是插入/更新後觸發的觸發器,並根據Col1更改Col2。或許,這將是這個樣子:
CREATE TRIGGER UpdateCol2
ON TaxVal
AFTER INSERT, UPDATE
AS
IF UPDATE(Col1)
BEGIN
UPDATE TaxVal
SET Col2 = CASE WHEN i.Col1 IS NOT NULL THEN 1 ELSE 0 END
FROM TaxVal t
INNER JOIN inserted i ON t.PrimaryKeyColumn = i.PrimaryKeyColumn
END
請參閱MSDN文檔聽起來像一個計算列是一個潛在的解決問題。出於性能原因,您還可以將計算列設置爲persisted。
declare @table table (
[column_01] [nvarchar](128)
, [column_02] as case
when [column_01] is null
then
0
else
1
end);
insert into @table
([column_01])
values (N'not null'),
(null);
select [column_01]
, [column_02]
from @table;
如何觸發而不是約束? – 2014-09-03 11:03:39