更改表中的Case语句出错

时间:2014-09-03 10:39:42

标签: sql-server tsql

当我尝试更改表并添加约束时,我无法让SQL Server解析我的查询。像这样:

ALTER TABLE TaxVal
ADD CONSTRAINT ch_taxVal CHECK (CASE WHEN Col1 IS NOT NULL THEN Col2 = 1 ELSE 0 END) 

我想根据col1的值或条件更新或设置col2的值。 我怎么做到这一点? 谢谢

2 个答案:

答案 0 :(得分: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

的MSDN文档

答案 1 :(得分:2)

听起来像计算列是该问题的一个潜在解决方案。出于性能原因,您还可以将计算列设置为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;