2010-02-15 135 views
3

SQL Server 2005中我有ColumnA位表,ColumnB诠释默认列值

我可以将默认值添加到ColumnB使ColumnB是15,如果ColumnA为1, ColumnB是0,如果ColumnA是0?

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

+0

:) “他需要触发灵敏度训练” 我的老板也是:)) – Ash

回答

8

如果您的ColumnB只能是15或零,您可以使其成为基于ColumnA的计算列。这里是添加一个新的计算列的代码:

ALTER TABLE YourTable ADD YourComputedColumn AS ColumnA*15 
go 
1

我能想到的唯一的非触发方式就是在存储过程中拥有逻辑。与触发器相比,它仍然是我的偏好,因为它是最有可能检查的地方。触发意味着您现在有两个地方可以检查何时发生错误/问题。

除此之外,它取决于使用情况 - 在可预见的将来,是否可能存在不应受触发逻辑影响的记录?否则,触发是解决问题的更集中手段。

1

您是否考虑过使用computed column?这不完全一样的东西......但也许这对你已经足够了?

1

我认为这可能会更好地处理您使用插入存储过程。另外,如果不了解表格所具有的数据类型,就很难说明最佳方法。我怀疑你可以通过将ColumnB分成另一个表来获得更清晰的模型。

1

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

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

0

其他方式:

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