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

Rinominare una chiave primaria in SQL Server (T-SQL)

In SQL Server puoi usare sp_rename stored procedure per rinominare un oggetto creato dall'utente nel database corrente, inclusa una chiave primaria.

Questo può essere utile se hai una chiave primaria a cui è stato assegnato automaticamente il nome e ora vuoi assegnarle un nome più leggibile.

Quando si crea una chiave primaria senza specificarne un nome in modo esplicito, SQL Server le delega automaticamente un nome. Tali nomi in genere includono un suffisso numerico lungo, che lo rende più difficile da ricordare. Se devi fare riferimento a quella chiave primaria (ad es. nel tuo codice, documentazione, ecc.), tali nomi possono renderti la vita più difficile. Fortunatamente, sp_rename fornisce un modo semplice e veloce per cambiare questo nome.

Sintassi

La sintassi per sp_rename va così:

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

Per le chiavi primarie (e altri vincoli), il tipo di oggetto è OBJECT .

Esempio

Per prima cosa, otteniamo il nome della chiave primaria che vogliamo cambiare:

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

Risultato:

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

Questa è la chiave primaria per la tabella chiamata t1 , Quindi andremo avanti e rinomineremo quella chiave primaria.

Quando si rinomina una chiave primaria, è necessario includere lo schema con il nome corrente.

Esempio:

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

Quando rinomini una chiave primaria (o qualsiasi altro oggetto) in SQL Server, probabilmente vedrai il seguente messaggio:

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

Questo fondamentalmente ci sta avvisando che tutti gli script e/o le procedure memorizzate che fanno riferimento all'oggetto potrebbero ora interrompersi e dovrebbero essere aggiornati di conseguenza per riflettere il nuovo nome.

In ogni caso, la chiave primaria è stata rinominata.

Possiamo verificarlo eseguendo nuovamente la query precedente:

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

Risultato:

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

Incluso il tipo di oggetto

Puoi anche includere il tipo di oggetto come terzo argomento. Per le chiavi primarie e altri vincoli, usa OBJECT :

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

Compresi i nomi dei parametri

Come con qualsiasi procedura memorizzata, puoi anche includere i nomi dei parametri quando chiami sp_rename :

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

Questo fa esattamente la stessa cosa (rinomina la chiave primaria specificata).