SQL Server 2005。我有一个带有ColumnA bit、ColumnB int的表。
如果ColumnA是1,则可以给ColumnB添加默认值,使ColumnB为15;如果ColumnA是0,则可以将ColumnB设为0。这样做可以吗?
我知道可以使用触发器来实现此操作,但我的老板对触发器持有偏见(他需要接受触发器敏感培训)。
SQL Server 2005。我有一个带有ColumnA bit、ColumnB int的表。
如果ColumnA是1,则可以给ColumnB添加默认值,使ColumnB为15;如果ColumnA是0,则可以将ColumnB设为0。这样做可以吗?
我知道可以使用触发器来实现此操作,但我的老板对触发器持有偏见(他需要接受触发器敏感培训)。
如果您的ColumnB只能是15或零,您可以将它设置为基于ColumnA的计算列。以下是添加新计算列的代码:
ALTER TABLE YourTable ADD YourComputedColumn AS ColumnA*15
go
我能想到的唯一非触发器方式是将逻辑放在存储过程中。与触发器相比,它仍然是我的首选,因为这是最可能检查的地方。触发器意味着当出现错误/问题时,您现在有两个要检查的地方。
除此之外,这取决于用法-在可预见的未来,是否会有不应受触发器逻辑影响的记录?如果没有,触发器是解决问题的更集中的手段。
我认为最好使用存储过程来处理插入操作。另外,如果不了解表中保存的数据类型,很难确定最佳方法。我猜你可以通过将ColumnB拆分到另一个表中来获得更清晰的模型。
计算列在某些情况下非常有用。值得一提的是,它们可以(但不必)被持久化。是否应该持久化列取决于它的使用方式。如果持久化,它将像“常规”列一样占用空间,否则将在运行时计算。您还可以在计算列上创建索引。
alter table yourTABLe add ColumnB as case when coalesce(ColumnA,0) = 15 then 0 else 1 end
go