SQL Server 2005中我有ColumnA位表,ColumnB诠释默认列值
我可以将默认值添加到ColumnB
使ColumnB
是15,如果ColumnA
为1, ColumnB
是0,如果ColumnA
是0?
我知道我可以用触发器做到这一点,但我的老板对触发器有偏见(他需要触发灵敏度训练)。
SQL Server 2005中我有ColumnA位表,ColumnB诠释默认列值
我可以将默认值添加到ColumnB
使ColumnB
是15,如果ColumnA
为1, ColumnB
是0,如果ColumnA
是0?
我知道我可以用触发器做到这一点,但我的老板对触发器有偏见(他需要触发灵敏度训练)。
如果您的ColumnB只能是15或零,您可以使其成为基于ColumnA的计算列。这里是添加一个新的计算列的代码:
ALTER TABLE YourTable ADD YourComputedColumn AS ColumnA*15
go
我能想到的唯一的非触发方式就是在存储过程中拥有逻辑。与触发器相比,它仍然是我的偏好,因为它是最有可能检查的地方。触发意味着您现在有两个地方可以检查何时发生错误/问题。
除此之外,它取决于使用情况 - 在可预见的将来,是否可能存在不应受触发逻辑影响的记录?否则,触发是解决问题的更集中手段。
您是否考虑过使用computed column?这不完全一样的东西......但也许这对你已经足够了?
我认为这可能会更好地处理您使用插入存储过程。另外,如果不了解表格所具有的数据类型,就很难说明最佳方法。我怀疑你可以通过将ColumnB分成另一个表来获得更清晰的模型。
计算列在某些情况下非常有用。值得一提的是,他们可以(但不是必须)坚持下去。是否应该保留列的选择取决于它的使用方式。如果它持续存在,它会将空间用作“常规”列,否则将在运行时进行计算。您也可以在计算列上创建索引。
其他方式:
alter table yourTABLe add ColumnB as case when coalesce(ColumnA,0) = 15 then 0 else 1 end
go
:) “他需要触发灵敏度训练” 我的老板也是:)) – Ash