默认列值基于不同列的值

时间:2010-02-15 21:06:14

标签: sql sql-server sql-server-2005

SQL Server 2005.我有一个ColumnA位的表,ColumnB int

我可以向ColumnB添加默认值,以便如果ColumnB为1,则ColumnA为15;如果ColumnB为0,则ColumnA为0吗?

我知道我可以用触发器做到这一点,但我的老板对触发器有偏见(他需要触发灵敏度训练)。

6 个答案:

答案 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)

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

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

答案 5 :(得分:0)

其他方式:

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