Tôi đang cố gắng tạo các kịch bản nâng cấp và sao lưu trong SQL. Các kịch bản nâng cấp bổ sung thêm một cột như vậy:Tại sao SQL Server tiếp tục tạo ra ràng buộc DF?
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
ADD ColumnName bit NOT NULL DEFAULT(0)
kịch bản backout loại bỏ các cột như sau:
IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
DROP COLUMN ColumnName
Tuy nhiên, kịch bản backout ném lỗi này:
Msg 5074, Level 16, State 1, Line 5
The object 'DF__TableName__ColumnName__1BF3D5BD' is dependent on column 'ColumnName'.
Msg 4922, Level 16, State 9, Line 5
ALTER TABLE DROP COLUMN ColumnName failed because one or more objects access this column.
tôi biết làm thế nào để thả ràng buộc, nhưng tên của ràng buộc thay đổi mọi lúc (hậu tố thay đổi). Tôi hoặc cần SQL Server để ngăn chặn việc tạo ra ràng buộc được đặt tên ngẫu nhiên này hoặc tôi cần để có thể loại bỏ ràng buộc trong kịch bản của tôi bằng cách sử dụng ký tự đại diện thẻ, vì tên thay đổi.
+1 nó thường được khuyến khích để đặt tên một cách rõ ràng những hạn chế. –
Cảm ơn Martin. Ngoài ra, để kiểm tra đúng nếu ràng buộc tồn tại (trước khi thả nó), tôi đã sử dụng phương pháp được mô tả ** [ở đây] (http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint- tồn tại-in-sql-server/6839547 # 6839547) ** – WEFX
@ ÁlvaroG.Vicario - vâng. Câu trả lời của Martin cho bạn một ví dụ. –