sql >> Databáze >  >> RDS >> Sqlserver

Přejmenování primárního klíče v SQL Server (T-SQL)

V SQL Server můžete použít sp_rename uložená procedura k přejmenování uživatelem vytvořeného objektu v aktuální databázi, včetně primárního klíče.

To se může hodit, pokud máte primární klíč, kterému byl automaticky přiřazen název, a nyní mu chcete dát čitelnější název.

Když vytvoříte primární klíč, aniž byste pro něj explicitně zadali název, SQL Server pro něj automaticky deleguje název. Taková jména obvykle obsahují dlouhou číselnou příponu, která ztěžuje zapamatování. Pokud potřebujete odkazovat na tento primární klíč (např. v kódu, dokumentaci atd.), mohou vám taková jména zkomplikovat život. Naštěstí sp_rename poskytuje rychlý a snadný způsob, jak tento název změnit.

Syntaxe

Syntaxe pro sp_rename vypadá takto:

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

Pro primární klíče (a další omezení) je typ objektu OBJECT .

Příklad

Nejprve zjistíme název primárního klíče, který chceme změnit:

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

Výsledek:

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

Toto je primární klíč pro tabulku s názvem t1 , Takže budeme pokračovat a přejmenujeme primární klíč.

Když přejmenujete primární klíč, musíte schéma zahrnout s aktuálním názvem.

Příklad:

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

Když přejmenujete primární klíč (nebo jakýkoli jiný objekt) na serveru SQL Server, pravděpodobně se vám zobrazí následující zpráva:

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

To nám v podstatě dává upozornění, že jakékoli skripty a/nebo uložené procedury, které odkazují na objekt, by se nyní mohly rozbít a měly by být odpovídajícím způsobem aktualizovány, aby odrážely nový název.

Bez ohledu na to byl primární klíč nyní přejmenován.

Můžeme to ověřit opětovným spuštěním předchozího dotazu:

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

Výsledek:

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

Včetně typu objektu

Jako třetí argument můžete také zahrnout typ objektu. Pro primární klíče a další omezení použijte OBJECT :

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

Včetně názvů parametrů

Stejně jako u jakékoli uložené procedury můžete také při volání sp_rename zahrnout názvy parametrů :

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

To dělá přesně to samé (přejmenuje zadaný primární klíč).


  1. Nerovná se <> !=operátor na NULL

  2. Rychlý způsob generování zřetězených řetězců v Oracle

  3. Jak číst a resetovat AUTO_INCREMENT v MySQL

  4. Oracle:SQL dotaz, který vrací řádky pouze s číselnými hodnotami