Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Umbenennen eines Primärschlüssels in SQL Server (T-SQL)

In SQL Server können Sie den sp_rename verwenden gespeicherte Prozedur zum Umbenennen eines vom Benutzer erstellten Objekts in der aktuellen Datenbank, einschließlich eines Primärschlüssels.

Dies kann praktisch sein, wenn Sie einen Primärschlüssel haben, dessen Name automatisch zugewiesen wurde, und Sie ihm jetzt einen besser lesbaren Namen geben möchten.

Wenn Sie einen Primärschlüssel erstellen, ohne explizit einen Namen dafür anzugeben, delegiert SQL Server automatisch einen Namen dafür. Solche Namen enthalten normalerweise ein langes numerisches Suffix, was es schwieriger macht, sich daran zu erinnern. Wenn Sie sich auf diesen Primärschlüssel beziehen müssen (z. B. in Ihrem Code, Ihrer Dokumentation usw.), können Ihnen solche Namen das Leben erschweren. Glücklicherweise sp_rename bietet eine schnelle und einfache Möglichkeit, diesen Namen zu ändern.

Syntax

Die Syntax für sp_rename geht so:

sp_rename 
    [ @objname = ] 'object_name' ,
    [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

Für Primärschlüssel (und andere Einschränkungen) ist der Objekttyp OBJECT .

Beispiel

Lassen Sie uns zuerst den Namen des Primärschlüssels ermitteln, den wir ändern möchten:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Ergebnis:

 +--------------+--------------------------+
 | SchemaName   | PrimaryKey               |
 |--------------+--------------------------|
 | dbo          | PK__t1__3213663B10938530 |
 +--------------+--------------------------+ 

Dies ist der Primärschlüssel für die Tabelle namens t1 , Also werden wir diesen Primärschlüssel umbenennen.

Wenn Sie einen Primärschlüssel umbenennen, müssen Sie das Schema mit dem aktuellen Namen einschließen.

Beispiel:

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';

Wenn Sie einen Primärschlüssel (oder ein anderes Objekt) in SQL Server umbenennen, sehen Sie wahrscheinlich die folgende Meldung:

Caution: Changing any part of an object name could break scripts and stored procedures.

Dies gibt uns im Grunde den Hinweis, dass alle Skripte und/oder gespeicherten Prozeduren, die auf das Objekt verweisen, jetzt kaputt gehen könnten und entsprechend aktualisiert werden sollten, um den neuen Namen widerzuspiegeln.

Unabhängig davon wurde der Primärschlüssel jetzt umbenannt.

Wir können dies überprüfen, indem wir die vorherige Abfrage erneut ausführen:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Ergebnis:

 +--------------+--------------+
 | SchemaName   | PrimaryKey   |
 |--------------+--------------|
 | dbo          | PK_t1        |
 +--------------+--------------+ 

Einschließlich des Objekttyps

Sie können auch den Objekttyp als drittes Argument angeben. Verwenden Sie für Primärschlüssel und andere Einschränkungen OBJECT :

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';

Einschließlich der Parameternamen

Wie bei jeder gespeicherten Prozedur können Sie auch die Parameternamen beim Aufruf von sp_rename einbeziehen :

EXEC sp_rename 
    @objname = 'dbo.PK__t1__3213663B10938530',
    @newname = 'PK_t1',
    @objtype = 'OBJECT';

Dies macht genau dasselbe (benennt den angegebenen Primärschlüssel um).