2

主キー以外のすべての一意のキーをテーブルから削除する方法はありますか?

私のキー名は ORM によって生成されており、その名前を保証することはできません。

4

2 に答える 2

1

これにより、すべての一意の制約が削除されますが、主キーは削除されません。主キーは引き続き一意性を強制します。

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
于 2012-10-10T08:43:32.227 に答える
1

これを試して

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'
于 2012-10-10T08:59:59.153 に答える