web-dev-qa-db-fra.com

Supprimer la clé primaire à l'aide d'un script dans la base de données SQL Server

Je dois supprimer la clé primaire d'une table Student dans une base de données SQL Server.

J'ai édité dans le tableau et le script que j'ai obtenu est

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

Mais quand j'exécute ce script dans le navigateur de requête SQL Server pour déposer la clé primaire

Il montre le message

Msg 3728, niveau 16, état 1, ligne 1
'PK__Student__9CC368536561EF8B' n'est pas une contrainte.
Msg 3727, niveau 16, état 0, ligne 1

À mon avis, je pense que PK__Student__9CC368536561EF8B ceci sera généré de manière aléatoire, aidez-moi à supprimer la contrainte de clé primaire en utilisant script.

Merci d'avance

41
muthukumar

Vous pouvez rechercher le nom de la contrainte dans la table sys.key_constraints:

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

Si vous ne vous souciez pas du nom, mais que vous voulez simplement le supprimer, vous pouvez utiliser une combinaison de ceci et du SQL dynamique:

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;

Ce code provient de Aaron Bertrand ( source ).

79
Bridge

cliquez simplement

'Base de données'> tables> nom de votre table> clés> copiez les contraintes telles que 'PK__TableName__30242045'

et exécutez la requête ci-dessous est:

Query:alter Table 'TableName' drop constraint PK__TableName__30242045
13
Harsh Bajaj

La réponse que j’ai obtenue est que les variables et les sous-requêtes ne fonctionneront pas et que nous devons utiliser un script SQL dynamique. Les oeuvres suivantes:

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)
4
muthukumar