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 typu danych zdefiniowanego przez użytkownika.
Składnia
Składnia wygląda tak:
EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';
Gdzie old_datatype
to nazwa typu danych zdefiniowanego przez użytkownika, którego nazwę chcesz zmienić, oraz new_datatype
to nowa nazwa, którą chcesz mu nadać.
Przykład
Rzućmy okiem na obecne typy danych zdefiniowane przez użytkownika w naszej bazie danych.
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Wynik:
+----------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |----------+--------------+-------------+---------+-------------------| | clientid | 8 | 0 | 0 | 1 | +----------+--------------+-------------+---------+-------------------+
Mamy jeden zdefiniowany przez użytkownika typ danych o nazwie clientid
.
Zmieńmy jego nazwę na clientcode
.
EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';
Uruchomienie, które zmienia nazwę na clientcode
. Możesz zobaczyć następujący komunikat:
Caution: Changing any part of an object name could break scripts and stored procedures.
To w zasadzie daje nam do zrozumienia, że jeśli mamy jakieś skrypty procedur składowanych, które odwołują się do naszego obiektu o zmienionej nazwie, to się zepsują i będziemy musieli je zaktualizować.
Możesz się zastanawiać, czy oznacza to, że jakiekolwiek istniejące kolumny korzystające z tego typu danych zostaną teraz uszkodzone?
Na szczęście istniejące kolumny powinny być w porządku.
Po zmianie nazwy typu danych zdefiniowanego przez użytkownika wszystkie kolumny korzystające z tego typu danych będą nadal używać tego typu danych z nową nazwą. Wszelkie ograniczenia typu danych (takie jak długość itp.) są nadal egzekwowane.
Sprawdźmy teraz ponownie naszą listę typów danych zdefiniowanych przez użytkownika:
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Wynik:
+------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------+--------------+-------------+---------+-------------------| | clientcode | 8 | 0 | 0 | 1 | +------------+--------------+-------------+---------+-------------------+
Zgodnie z oczekiwaniami nazwa została zmieniona zgodnie z opisem.