W SQL Server możesz użyć sp_rename
procedura składowana do zmiany nazwy obiektu utworzonego przez użytkownika w bieżącej bazie danych, w tym klucza podstawowego.
Może to być przydatne, jeśli masz klucz podstawowy, który miał automatycznie przypisaną nazwę, a teraz chcesz nadać mu bardziej czytelną nazwę.
Gdy tworzysz klucz podstawowy bez jawnego podawania jego nazwy, SQL Server automatycznie deleguje dla niego nazwę. Takie nazwy zazwyczaj zawierają długi przyrostek numeryczny, co utrudnia ich zapamiętanie. Jeśli potrzebujesz odwołać się do tego klucza podstawowego (np. w kodzie, dokumentacji itp.), takie nazwy mogą utrudnić ci życie. Na szczęście sp_rename
zapewnia szybki i łatwy sposób zmiany tej nazwy.
Składnia
Składnia sp_rename
idzie tak:
sp_rename
[ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
W przypadku kluczy podstawowych (i innych ograniczeń) typ obiektu to OBJECT
.
Przykład
Najpierw zdobądźmy nazwę klucza podstawowego, który chcemy zmienić:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Wynik:
+--------------+--------------------------+ | SchemaName | PrimaryKey | |--------------+--------------------------| | dbo | PK__t1__3213663B10938530 | +--------------+--------------------------+
To jest klucz podstawowy tabeli o nazwie t1
, więc przejdziemy dalej i zmienimy nazwę tego klucza podstawowego.
Gdy zmieniasz nazwę klucza podstawowego, musisz dołączyć schemat z bieżącą nazwą.
Przykład:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';
Gdy zmienisz nazwę klucza podstawowego (lub dowolnego innego obiektu) w SQL Server, prawdopodobnie zobaczysz następujący komunikat:
Caution: Changing any part of an object name could break scripts and stored procedures.
Zasadniczo daje nam to informację, że wszelkie skrypty i/lub procedury składowane, które odwołują się do obiektu, mogą teraz zostać zepsute i powinny zostać odpowiednio zaktualizowane, aby odzwierciedlić nową nazwę.
Niezależnie od tego, nazwa klucza głównego została zmieniona.
Możemy to zweryfikować, ponownie uruchamiając poprzednie zapytanie:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))
AND type = 'PK';
Wynik:
+--------------+--------------+ | SchemaName | PrimaryKey | |--------------+--------------| | dbo | PK_t1 | +--------------+--------------+
W tym typ obiektu
Jako trzeci argument można również dołączyć typ obiektu. W przypadku kluczy podstawowych i innych ograniczeń użyj OBJECT
:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';
W tym nazwy parametrów
Podobnie jak w przypadku każdej procedury składowanej, można również dołączyć nazwy parametrów podczas wywoływania sp_rename
:
EXEC sp_rename
@objname = 'dbo.PK__t1__3213663B10938530',
@newname = 'PK_t1',
@objtype = 'OBJECT';
Robi dokładnie to samo (zmienia nazwę określonego klucza podstawowego).