1
我在數據庫中創建了一個DEFAULT約束,我想在幾個表中共享這個約束,並且我想編寫一個用於添加字段的唯一alter table語句該表如下:T-SQL添加綁定到現有默認約束的列
ALTER TABLE MyTable ADD MyField NOT NULL DEFAULT(DF_EXISTING_DEFAULT)
以下錯誤ocurrs:
Msg 128, Level 15, State 1, Line 1
The name "DF_EXISTING_DEFAULT" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
注意,默認值是DF_EXISTING_DEFAULT已經定義,我不想再寫一遍。我該怎麼做?任何理由我不應該這樣做?這是一個t-sql限制嗎?
嗯,默認並不複雜(例如DEFAULT('簡單文本'),但它可以在將來改變。在這種情況下,UDF是避免「代碼重複」的唯一方法嗎?這個時候是保留一個* single *默認值,並避免那些sql自動約束命名。 – natenho
@natenho - 是的。默認*約束*不能在列之間共享,並且在SQL Server中沒有用戶定義的全局變量,所以避免在約束定義中重複「簡單的文本」這是唯一的方法,你也可以將它存儲在一個表中,但這也需要一個UDF來訪問,存儲在表中的優點可能更容易維護(改變UDF定義將需要刪除引用它的所有默認值),但在UDF中硬編碼將更有效,而約束定義本身更加如此。 lity。 –
關於「不能共享」......當你在多個表/列中使用'sp_binddefault'作爲同一個DF時,你不是在共享約束嗎?至少我看不到新的約束條件。 – natenho