2014-09-03 67 views
2

我試圖更改表並添加約束條件時,無法獲取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的值。 我該怎麼做? 謝謝

+0

如何觸發而不是約束? – 2014-09-03 11:03:39

回答

2

約束條件只強制執行有關您試圖添加或更改的數據的規則,但它們不會修改數據。你想要的最有可能是插入/更新後觸發的觸發器,並根據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 

CREATE TRIGGER

2

請參閱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;