sql >> Database teknologi >  >> RDS >> Sqlserver

Omdøb en primær nøgle i SQL Server (T-SQL)

I SQL Server kan du bruge sp_rename gemt procedure til at omdøbe et brugeroprettet objekt i den aktuelle database, inklusive en primær nøgle.

Dette kan være praktisk, hvis du har en primær nøgle, der har fået sit navn automatisk tildelt, og du nu vil give den et mere læsbart navn.

Når du opretter en primær nøgle uden eksplicit at angive et navn til den, uddelegerer SQL Server automatisk et navn til den. Sådanne navne inkluderer typisk et langt numerisk suffiks, hvilket gør det sværere at huske. Hvis du har brug for at henvise til den primære nøgle (f.eks. i din kode, dokumentation osv.), kan sådanne navne gøre dit liv sværere. Heldigvis sp_rename giver en hurtig og nem måde at ændre dette navn på.

Syntaks

Syntaksen for sp_rename går sådan her:

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

For primære nøgler (og andre begrænsninger) er objekttypen OBJECT .

Eksempel

Lad os først få navnet på den primære nøgle, som vi vil ændre:

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

Resultat:

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

Dette er den primære nøgle til tabellen kaldet t1 , Så vi vil gå videre og omdøbe den primære nøgle.

Når du omdøber en primær nøgle, skal du inkludere skemaet med det aktuelle navn.

Eksempel:

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

Når du omdøber en primær nøgle (eller et hvilket som helst andet objekt) i SQL Server, vil du sandsynligvis se følgende meddelelse:

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

Dette giver os dybest set besked på, at alle scripts og/eller lagrede procedurer, der refererer til objektet, nu kan bryde, og bør opdateres i overensstemmelse hermed for at afspejle det nye navn.

Uanset hvad er den primære nøgle nu blevet omdøbt.

Vi kan bekræfte dette ved at køre den forrige forespørgsel igen:

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

Resultat:

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

Inklusive objekttypen

Du kan også inkludere objekttypen som et tredje argument. For primære nøgler og andre begrænsninger, brug OBJECT :

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

Inklusive parameternavnene

Som med enhver lagret procedure kan du også inkludere parameternavnene, når du kalder sp_rename :

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

Dette gør nøjagtig det samme (omdøber den angivne primærnøgle).


  1. Schema Management Tips til MySQL &MariaDB

  2. Brug af Database Backup Advisors til at automatisere vedligeholdelsesopgaver

  3. Hvordan indstilles tabelnavn i dynamisk SQL-forespørgsel?

  4. Sådan fungerer TIME_FORMAT() i MariaDB