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