Перенести первичный ключ с помощью 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)