В SQL Server можете да използвате sp_rename
съхранена процедура за преименуване на обект, създаден от потребител, в текущата база данни, включително първичен ключ.
Това може да бъде удобно, ако имате първичен ключ, на който името му е присвоено автоматично, и сега искате да му дадете по-четливо име.
Когато създадете първичен ключ, без изрично да предоставите име за него, SQL Server автоматично делегира име за него. Такива имена обикновено включват дълъг цифров суфикс, което прави по-трудно запомнянето. Ако трябва да се обърнете към този първичен ключ (например във вашия код, документация и т.н.), такива имена могат да направят живота ви по-труден. За щастие, sp_rename
предоставя бърз и лесен начин за промяна на това име.
Синтаксис
Синтаксисът за sp_rename
става така:
sp_rename
[ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
За първични ключове (и други ограничения) типът на обекта е OBJECT
.
Пример
Първо, нека вземем името на първичния ключ, който искаме да променим:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Резултат:
+--------------+--------------------------+ | SchemaName | PrimaryKey | |--------------+--------------------------| | dbo | PK__t1__3213663B10938530 | +--------------+--------------------------+
Това е първичният ключ за таблицата, наречена t1
, Така че ще продължим и ще преименуваме този първичен ключ.
Когато преименувате първичен ключ, трябва да включите схемата с текущото име.
Пример:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';
Когато преименувате първичен ключ (или всеки друг обект) в SQL Server, вероятно ще видите следното съобщение:
Caution: Changing any part of an object name could break scripts and stored procedures.
Това по същество ни дава предупреждение, че всички скриптове и/или съхранени процедури, които препращат към обекта, вече могат да се развалят и трябва да бъдат актуализирани съответно, за да отразяват новото име.
Независимо от това, първичният ключ вече е преименуван.
Можем да проверим това, като изпълним отново предишната заявка:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Резултат:
+--------------+--------------+ | SchemaName | PrimaryKey | |--------------+--------------| | dbo | PK_t1 | +--------------+--------------+
Включително типа на обекта
Можете също да включите типа обект като трети аргумент. За първични ключове и други ограничения използвайте OBJECT
:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';
Включително имената на параметрите
Както при всяка съхранена процедура, можете също да включите имената на параметрите, когато извиквате sp_rename
:
EXEC sp_rename
@objname = 'dbo.PK__t1__3213663B10938530',
@newname = 'PK_t1',
@objtype = 'OBJECT';
Това прави точно същото нещо (именува посочения първичен ключ).