我試圖
嘗試執行生成的腳本時,它適用于初始資料庫創建。
所有后續嘗試運行生成的腳本都會導致以下錯誤:
Msg 1781, Level 16, State 1, Line 8739
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 8739
Could not create constraint or index. See previous errors.

此代碼似乎適用于初始資料庫創建,但不適用于后續執行:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[cfg].[DF__LookupCol__IsPri__46DD686B]') AND type = 'D')
BEGIN
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
END
GO
我也嘗試過,結果相同:
ALTER TABLE [cfg].[LookupColumns] ADD CONSTRAINT LookupColumnsIsPrimaryKeyConstraint DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
我究竟做錯了什么?這個錯誤是什么意思?列已經系結了 DEFAULT嗎?
uj5u.com熱心網友回復:
這確實是因為您沒有命名約束,所以第二次嘗試洗掉舊名稱然后添加一個額外的約束。
第一次運行腳本時,它會檢查一個名為 的默認約束DF__LookupCol__IsPri__46DD686B,該約束當然不存在。
然后它運行
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
這會創建一個具有新自動生成名稱的新約束。下次運行腳本時,它會DF__LookupCol__IsPri__46DD686B再次嘗試洗掉,但仍然不存在,然后嘗試添加新約束,但失敗了。
因此,為了能夠重新運行此腳本,您應該在生成腳本之前命名所有約束和索引。
您可以找到系統命名的默認約束,如下所示:
select name, object_name(object_id) table_name
from sys.default_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.check_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.key_constraints
where is_system_named = 1
等等
或者您可以__在名稱中查找,但您當然希望手動查看這些名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311512.html
標籤:sql 查询语句 azure-sql-数据库 短信
上一篇:將括號中的值拆分為列
