基于不同列的值设置默认列值

4

SQL Server 2005。我有一个带有ColumnA bit、ColumnB int的表。

如果ColumnA是1,则可以给ColumnB添加默认值,使ColumnB为15;如果ColumnA是0,则可以将ColumnB设为0。这样做可以吗?

我知道可以使用触发器来实现此操作,但我的老板对触发器持有偏见(他需要接受触发器敏感培训)。


他需要触发器敏感性培训。我的老板也是如此 :)) - Ash
现在的人们非常容易被触发。 - Ads
6个回答

9

如果您的ColumnB只能是15或零,您可以将它设置为基于ColumnA的计算列。以下是添加新计算列的代码:

ALTER TABLE YourTable ADD YourComputedColumn AS ColumnA*15
go

2
你是否考虑过使用计算列来代替?虽然并不完全相同,但或许已经足够了?

请参考计算列


1

我能想到的唯一非触发器方式是将逻辑放在存储过程中。与触发器相比,它仍然是我的首选,因为这是最可能检查的地方。触发器意味着当出现错误/问题时,您现在有两个要检查的地方。

除此之外,这取决于用法-在可预见的未来,是否会有不应受触发器逻辑影响的记录?如果没有,触发器是解决问题的更集中的手段。


1

我认为最好使用存储过程来处理插入操作。另外,如果不了解表中保存的数据类型,很难确定最佳方法。我猜你可以通过将ColumnB拆分到另一个表中来获得更清晰的模型。


1

计算列在某些情况下非常有用。值得一提的是,它们可以(但不必)被持久化。是否应该持久化列取决于它的使用方式。如果持久化,它将像“常规”列一样占用空间,否则将在运行时计算。您还可以在计算列上创建索引。

http://msdn.microsoft.com/en-us/library/ms191250.aspx


1
其他方式:

alter table yourTABLe add ColumnB as case when coalesce(ColumnA,0) = 15 then 0 else 1 end
go

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接