主キー以外のすべての一意のキーをテーブルから削除する方法はありますか?
私のキー名は ORM によって生成されており、その名前を保証することはできません。
これにより、すべての一意の制約が削除されますが、主キーは削除されません。主キーは引き続き一意性を強制します。
declare @table_name nvarchar(50) = 'yourtable' -- table
declare @SchemaName nvarchar(50) = 'yourschema' -- dbo
declare @Catalog nvarchar(50) = 'yourdatabase' -- database
select * into #t from
(
select 'ALTER TABLE ' + TC.CONSTRAINT_CATALOG + '.' + TC.CONSTRAINT_SCHEMA + '.' + TC.TABLE_NAME + ' DROP CONSTRAINT ' + CCU.CONSTRAINT_NAME query
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as TC
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as CCU
on TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
and TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
and TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
where TC.CONSTRAINT_CATALOG = coalesce(@Catalog, db_name())
and TC.CONSTRAINT_SCHEMA = @SchemaName
and TC.TABLE_NAME = @table_name
and TC.CONSTRAINT_TYPE = 'UNIQUE'
) a
DECLARE @sqlstring as nvarchar(500)
DECLARE SqlCursor CURSOR FAST_FORWARD FOR
SELECT query FROM #t
OPEN SqlCursor
FETCH NEXT FROM SqlCursor
INTO @sqlstring
WHILE @@FETCH_STATUS = 0
BEGIN
exec(@sqlstring)
FETCH NEXT FROM SqlCursor
INTO @sqlstring
END
CLOSE SqlCursor
DEALLOCATE SqlCursor
DROP TABLE #t
これを試して
select
distinct 'Alter table MyTable drop constraint '+o.name
from sys.objects o
join sys.columns c on o.parent_object_id = c.object_id AND o.type='UQ'
join sys.tables t on c.object_id = t.object_id
where t.name = 'MyTable'