sql >> Databasteknik >  >> RDS >> Sqlserver

Byt namn på en primär nyckel i SQL Server (T-SQL)

I SQL Server kan du använda sp_rename lagrad procedur för att byta namn på ett användarskapat objekt i den aktuella databasen, inklusive en primärnyckel.

Detta kan vara praktiskt om du har en primärnyckel som fick sitt namn automatiskt och du nu vill ge den ett mer läsbart namn.

När du skapar en primärnyckel utan att uttryckligen ange ett namn för den, delegerar SQL Server automatiskt ett namn för den. Sådana namn innehåller vanligtvis ett långt numeriskt suffix, vilket gör det svårare att komma ihåg. Om du behöver hänvisa till den primära nyckeln (t.ex. i din kod, dokumentation, etc), kan sådana namn göra ditt liv svårare. Lyckligtvis, sp_rename ger ett snabbt och enkelt sätt att ändra detta namn.

Syntax

Syntaxen för sp_rename går så här:

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

För primärnycklar (och andra begränsningar) är objekttypen OBJECT .

Exempel

Låt oss först få namnet på den primära nyckeln som vi vill ändra:

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 |
 +--------------+--------------------------+ 

Detta är den primära nyckeln för tabellen som heter t1 , Så vi går vidare och byter namn på den primärnyckeln.

När du byter namn på en primärnyckel måste du inkludera schemat med det aktuella namnet.

Exempel:

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

När du byter namn på en primärnyckel (eller något annat objekt) i SQL Server, kommer du förmodligen att se följande meddelande:

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

Detta ger oss i grunden insikten om att alla skript och/eller lagrade procedurer som refererar till objektet nu kan gå sönder, och bör uppdateras i enlighet med det för att återspegla det nya namnet.

Oavsett vilket har primärnyckeln nu bytt namn.

Vi kan verifiera detta genom att köra den föregående frågan 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 också inkludera objekttypen som ett tredje argument. För primärnycklar och andra begränsningar, använd OBJECT :

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

Inklusive parameternamnen

Som med alla lagrade förfaranden kan du även inkludera parameternamnen när du anropar sp_rename :

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

Detta gör exakt samma sak (byter namn på den angivna primärnyckeln).


  1. Handledning för formulär och rapporter för Oracle 9i, Oracle 10g och Oracle 11g Developer Suite

  2. Fixa "profilnamnet är inte giltigt" när du skickar e-post från SQL Server

  3. En biblioteksdatamodell

  4. Hur man ansluter fjärransluten MySQL-databas i PHP