在不知道名稱的情況下刪除SQL 預設約束
在SQL Server 中,預設約束是一種指定將自動分配的值的方法如果沒有提供其他值,則為列。但是,在某些情況下,預設約束名稱未知或輸入錯誤。
挑戰
要刪除預設約束,請使用 ALTER TABLE DROP CONSTRAINT 語法需要指定約束名稱。不幸的是,有關預設約束的資訊無法透過 INFORMATION_SCHEMA 表輕鬆取得。
解決方案
克服此挑戰的一種方法是使用動態 SQL 產生命令刪除基於架構、表格和列名稱的限制。以下是一個範例:
declare @schema_name nvarchar(256) declare @table_name nvarchar(256) declare @col_name nvarchar(256) declare @Command nvarchar(1000) set @schema_name = N'MySchema' set @table_name = N'Department' set @col_name = N'ModifiedDate' select @Command = 'ALTER TABLE ' + @schema_name + '.[' + @table_name + '] DROP CONSTRAINT ' + d.name from sys.tables t join sys.default_constraints d on d.parent_object_id = t.object_id join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id where t.name = @table_name and t.schema_id = schema_id(@schema_name) and c.name = @col_name execute (@Command)
此腳本根據提供的資訊動態產生必要的 ALTER TABLE DROP CONSTRAINT 命令並執行它,刪除預設約束而不需要其確切名稱。
透過利用動態 SQL,此方法允許刪除預設約束,而無需先驗知識或由於不正確的約束名稱而導致的潛在錯誤。
以上是如何在不知道名稱的情況下刪除 SQL Server 預設約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!