sql >> Database >  >> RDS >> Sqlserver

Hernoem een ​​primaire sleutel in SQL Server (T-SQL)

In SQL Server kunt u de sp_rename . gebruiken opgeslagen procedure om een ​​door de gebruiker gemaakt object in de huidige database te hernoemen, inclusief een primaire sleutel.

Dit kan handig zijn als u een primaire sleutel heeft waaraan de naam automatisch is toegewezen en u deze nu een beter leesbare naam wilt geven.

Wanneer u een primaire sleutel maakt zonder er expliciet een naam voor op te geven, delegeert SQL Server er automatisch een naam voor. Dergelijke namen bevatten meestal een lang numeriek achtervoegsel, waardoor het moeilijker te onthouden is. Als u naar die primaire sleutel moet verwijzen (bijvoorbeeld in uw code, documentatie, enz.), kunnen dergelijke namen uw leven moeilijker maken. Gelukkig, sp_rename biedt een snelle en gemakkelijke manier om deze naam te wijzigen.

Syntaxis

De syntaxis voor sp_rename gaat als volgt:

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

Voor primaire sleutels (en andere beperkingen) is het objecttype OBJECT .

Voorbeeld

Laten we eerst de naam krijgen van de primaire sleutel die we willen wijzigen:

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

Resultaat:

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

Dit is de primaire sleutel voor de tabel met de naam t1 , Dus we gaan door en hernoemen die primaire sleutel.

Wanneer u de naam van een primaire sleutel wijzigt, moet u het schema met de huidige naam opnemen.

Voorbeeld:

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

Wanneer u de naam van een primaire sleutel (of een ander object) in SQL Server wijzigt, ziet u waarschijnlijk het volgende bericht:

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

Dit geeft ons in feite de waarschuwing dat alle scripts en/of opgeslagen procedures die naar het object verwijzen, nu kunnen breken en dienovereenkomstig moeten worden bijgewerkt om de nieuwe naam weer te geven.

Hoe dan ook, de primaire sleutel is nu hernoemd.

We kunnen dit verifiëren door de vorige zoekopdracht opnieuw uit te voeren:

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

Resultaat:

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

Inclusief het objecttype

U kunt het objecttype ook als derde argument opnemen. Gebruik voor primaire sleutels en andere beperkingen OBJECT :

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

Inclusief de parameternamen

Zoals bij elke opgeslagen procedure, kunt u ook de parameternamen opnemen bij het aanroepen van sp_rename :

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

Dit doet precies hetzelfde (hernoemt de opgegeven primaire sleutel).


  1. Dubbele rijen verwijderen uit tabel in Oracle

  2. 4 manieren om dubbele rijen te vinden in MySQL

  3. Fout:Tabelruimte voor tabel xxx bestaat. VERWIJDER de tabelruimte vóór het IMPORTEREN

  4. SHA1-hashwaarden opslaan in MySQL