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