Удаление первичных ключей или внешних ключей в MS SQL Server с примерами кода

Чтобы сгенерировать запрос на удаление первичных или внешних ключей в MS SQL Server, вы можете использовать следующие методы:

Метод 1: использование оператора ALTER TABLE

-- To drop a primary key
ALTER TABLE TableName
DROP CONSTRAINT PrimaryKeyName;
-- To drop a foreign key
ALTER TABLE TableName
DROP CONSTRAINT ForeignKeyName;

Метод 2: использование системной хранимой процедуры sp_fkeys

-- To drop a primary key
EXEC sp_primarykey @table_name = 'TableName', @pk_name = 'PrimaryKeyName', @drop_existing = 1;
-- To drop a foreign key
EXEC sp_fkeys @fktable_name = 'TableName', @fk_name = 'ForeignKeyName', @drop_existing = 1;

Метод 3. Использование представлений INFORMATION_SCHEMA

-- To drop a primary key
DECLARE @sql NVARCHAR(MAX);
SET @sql = (
    SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' DROP CONSTRAINT ' + CONSTRAINT_NAME + ';' AS [text()]
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND TABLE_NAME = 'TableName'
    FOR XML PATH('')
);
EXEC (@sql);
-- To drop a foreign key
DECLARE @sql NVARCHAR(MAX);
SET @sql = (
    SELECT 'ALTER TABLE ' + FK.TABLE_SCHEMA + '.' + FK.TABLE_NAME + ' DROP CONSTRAINT ' + C.CONSTRAINT_NAME + ';' AS [text()]
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
    WHERE FK.TABLE_NAME = 'TableName'
        AND FK.CONSTRAINT_TYPE = 'FOREIGN KEY'
    FOR XML PATH('')
);
EXEC (@sql);