現在公開されている次のような列を持つテーブルがあります。
name NVARCHAR(128) NOT NULL DEFAULT ''
私はこのように列を変更してnull許容にします:
ALTER TABLE mytable ALTER COLUMN name NVARCHAR(128) NULL
ただし、テーブルの1つのインスタンスで「DF__mytable__datab__7DE4B36」という名前のデフォルトの制約はそのまま残ります。元の作成者が制約に名前を付けていれば、これは回避できたはずです。これらのテーブルのインスタンスがいくつかありますが、持っているすべてのテーブルのすべての制約を手動で削除したくありません。このテーブルのすべてのインスタンスに均一に適用できる、SQL Serverの列にこのデフォルトの制約をドロップする最も簡単でエレガントな方法は何ですか?
編集
これは私が使用することになったスクリプトです:
DECLARE @table_id AS INT
DECLARE @name_column_id AS INT
DECLARE @sql nvarchar(255)
-- Find table id
SET @table_id = OBJECT_ID('mytable')
-- Find name column id
SELECT @name_column_id = column_id
FROM sys.columns
WHERE object_id = @table_id
AND name = 'name'
-- Remove default constraint from name column
SELECT @sql = 'ALTER TABLE mytable DROP CONSTRAINT ' + D.name
FROM sys.default_constraints AS D
WHERE D.parent_object_id = @table_id
AND D.parent_column_id = @name_column_id
EXECUTE sp_executesql @sql
これを実現するために使用できる別のスクリプトは、ここにあります 。名前を知らずにSQLのデフォルトの制約を削除する方法は?
ありがとう!