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).