当我尝试更改表并添加约束时,我无法让SQL Server解析我的查询。像这样:
ALTER TABLE TaxVal
ADD CONSTRAINT ch_taxVal CHECK (CASE WHEN Col1 IS NOT NULL THEN Col2 = 1 ELSE 0 END)
我想根据col1的值或条件更新或设置col2的值。 我怎么做到这一点? 谢谢
答案 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
的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;