it-swarm.com.de

Löschen Sie den Primärschlüssel mithilfe eines Skripts in der SQL Server-Datenbank

Ich muss den Primärschlüssel einer Tabelle Student in einer SQL Server-Datenbank löschen.

Ich habe in der Tabelle bearbeitet und das Skript, das ich bekam, ist

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

Aber wenn ich dieses Skript in SQL Server-Abfrage-Browser ausführen, um den Primärschlüssel zu löschen

Es zeigt die Nachricht

Nachricht 3728, Ebene 16, Status 1, Zeile 1
'PK__Student__9CC368536561EF8B' ist keine Einschränkung.
Nachricht 3727, Ebene 16, Status 0, Zeile 1

Zu meiner Sorge denke ich PK__Student__9CC368536561EF8B Dies wird zufällig generiert. Bitte helfen Sie mir, die Primärschlüsseleinschränkung mithilfe von Skript zu löschen.

Danke im Voraus

41
muthukumar

Sie können den Namen der Einschränkung in der Tabelle sys.key_constraints nachschlagen:

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

Wenn Sie sich nicht für den Namen interessieren, sondern ihn einfach löschen möchten, können Sie eine Kombination aus diesem und dynamischem SQL verwenden:

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;

Dieser Code stammt von Aaron Bertrand ( Quelle ).

79
Bridge

einfach anklicken

'Datenbank'> Tabellen> Ihr Tabellenname> Schlüssel> Kopieren Sie die Einschränkungen wie 'PK__TableName__30242045'

und führen Sie die folgende Abfrage aus:

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

Die Antwort ist, dass Variablen und Unterabfragen nicht funktionieren und wir ein dynamisches SQL-Skript verwenden müssen. Die folgenden Arbeiten:

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