In SQL Server können Sie den sp_rename
verwenden gespeicherte Prozedur zum Umbenennen eines vom Benutzer erstellten Objekts in der aktuellen Datenbank, einschließlich eines benutzerdefinierten Datentyps.
Syntax
Die Syntax lautet wie folgt:
EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';
Wobei old_datatype
ist der Name des benutzerdefinierten Datentyps, den Sie umbenennen möchten, und new_datatype
ist der neue Name, den Sie ihm geben möchten.
Beispiel
Werfen wir einen Blick auf die aktuellen benutzerdefinierten Datentypen in unserer Datenbank.
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Ergebnis:
+----------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |----------+--------------+-------------+---------+-------------------| | clientid | 8 | 0 | 0 | 1 | +----------+--------------+-------------+---------+-------------------+
Wir haben einen benutzerdefinierten Datentyp namens clientid
.
Benennen wir es in clientcode
um .
EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';
Wenn Sie das ausführen, wird es in clientcode
umbenannt . Möglicherweise wird die folgende Meldung angezeigt:
Caution: Changing any part of an object name could break scripts and stored procedures.
Dies gibt uns im Grunde den Hinweis, dass Skripte von gespeicherten Prozeduren, die auf unser umbenanntes Objekt verweisen, kaputt gehen und wir sie aktualisieren müssen.
Sie fragen sich vielleicht, ob dies bedeutet, dass alle vorhandenen Spalten, die diesen Datentyp verwenden, jetzt beschädigt werden?
Glücklicherweise sollten vorhandene Spalten in Ordnung sein.
Nach dem Umbenennen des benutzerdefinierten Datentyps verwenden alle Spalten, die diesen Datentyp verwenden, weiterhin diesen Datentyp mit seinem neuen Namen. Alle Einschränkungen des Datentyps (wie Länge usw.) werden weiterhin durchgesetzt.
Sehen wir uns nun noch einmal unsere Liste der benutzerdefinierten Datentypen an:
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Ergebnis:
+------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------+--------------+-------------+---------+-------------------| | clientcode | 8 | 0 | 0 | 1 | +------------+--------------+-------------+---------+-------------------+
Wie erwartet wurde es wie angegeben umbenannt.