Перенести первичный ключ с помощью script в базу данных SQL Server

Мне нужно удалить первичный ключ таблицы Student в базе данных SQL Server.

Я редактировал в таблице, а script получил

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

Но когда я запустил этот script в браузере запросов SQL Server, чтобы удалить первичный ключ

Отображается сообщение

Msg 3728, уровень 16, состояние 1, строка 1
"PK__Student__9CC368536561EF8B" не является ограничением.
Msg 3727, уровень 16, состояние 0, строка 1

К моему беспокойству я думаю, что PK__Student__9CC368536561EF8B это будет генерироваться случайным образом пожалуйста, помогите мне сбросить ограничение первичного ключа, используя script.

Заранее спасибо

Ответ 1

Вы можете найти имя ограничения в таблице sys.key_constraints:

SELECT name
FROM   sys.key_constraints
WHERE  [type] = 'PK'
       AND [parent_object_id] = Object_id('dbo.Student');

Если вам не интересно имя, но просто хотите его удалить, вы можете использовать комбинацию этого и динамического sql:

DECLARE @table NVARCHAR(512), @sql NVARCHAR(MAX);

SELECT @table = N'dbo.Student';

SELECT @sql = 'ALTER TABLE ' + @table 
    + ' DROP CONSTRAINT ' + name + ';'
    FROM sys.key_constraints
    WHERE [type] = 'PK'
    AND [parent_object_id] = OBJECT_ID(@table);

EXEC sp_executeSQL @sql;

Этот код принадлежит Аарону Бертрану (источник).

Ответ 2

просто нажмите

"База данных" > таблицы > ваши имя таблицы > ключи > скопируйте ограничения типа "PK__TableName__30242045"

и выполните следующий запрос:

Query:alter Table 'TableName' drop constraint PK__TableName__30242045

Ответ 3

Ответ, который я получил, это то, что переменные и подзапросы  не будет работать, и у нас есть пользовательский динамический SQL script. Следующие работы:

DECLARE @SQL VARCHAR(4000)
SET @SQL = 'ALTER TABLE dbo.Student DROP CONSTRAINT |ConstraintName| '

SET @SQL = REPLACE(@SQL, '|ConstraintName|', ( SELECT   name
                                               FROM     sysobjects
                                               WHERE    xtype = 'PK'
                                                        AND parent_obj =        OBJECT_ID('Student')))

EXEC (@SQL)