2010-02-15 174 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