Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Umbenennen eines benutzerdefinierten Datentyps in SQL Server (T-SQL)

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.