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