TSQL の列のデフォルト制約を削除する 質問する

TSQL の列のデフォルト制約を削除する 質問する

現在ライブになっている次のような列を持つテーブルがあります:

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 デフォルト制約を削除するにはどうすればよいでしょうか?

ありがとう!

ベストアンサー1

制約を削除するにはこうします

ALTER TABLE <schema_name, sysname, dbo>.<table_name, sysname, table_name>
   DROP CONSTRAINT <default_constraint_name, sysname, default_constraint_name>
GO

スクリプト付き

-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)

set @database = 'dotnetnuke'
set @table = 'tabs'

DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
    select    @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME 
    from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
    where    constraint_catalog = @database and 
            table_name = @table
    exec    sp_executesql @sql
END

クレジットはジョン・ギャロウェイ氏に帰属しますhttp://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx

おすすめ記事