In SQL Server kunt u de sp_rename
. gebruiken opgeslagen procedure om een door de gebruiker gemaakt object in de huidige database te hernoemen, inclusief een door de gebruiker gedefinieerd gegevenstype.
Syntaxis
De syntaxis gaat als volgt:
EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';
Waar old_datatype
is de naam van het door de gebruiker gedefinieerde gegevenstype waarvan u de naam wilt wijzigen, en new_datatype
is de nieuwe naam die u eraan wilt geven.
Voorbeeld
Laten we eens kijken naar de huidige door de gebruiker gedefinieerde gegevenstypen in onze database.
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Resultaat:
+----------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |----------+--------------+-------------+---------+-------------------| | clientid | 8 | 0 | 0 | 1 | +----------+--------------+-------------+---------+-------------------+
We hebben één door de gebruiker gedefinieerd gegevenstype genaamd clientid
.
Laten we het hernoemen naar clientcode
.
EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';
Uitvoeren dat de naam hernoemt naar clientcode
. Mogelijk ziet u het volgende bericht:
Caution: Changing any part of an object name could break scripts and stored procedures.
Dit geeft ons in feite de waarschuwing dat als we scripts van opgeslagen procedures hebben die verwijzen naar ons hernoemde object, ze zullen breken en dat we ze moeten bijwerken.
U vraagt zich misschien af of dit betekent dat bestaande kolommen die dit gegevenstype gebruiken, nu worden verbroken?
Gelukkig zouden bestaande kolommen in orde moeten zijn.
Na het hernoemen van het door de gebruiker gedefinieerde gegevenstype, blijven alle kolommen die dat gegevenstype gebruiken dat gegevenstype gebruiken met de nieuwe naam. Alle beperkingen van het gegevenstype (zoals lengte, enz.) blijven gehandhaafd.
Laten we nu onze lijst met door de gebruiker gedefinieerde gegevenstypen opnieuw bekijken:
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Resultaat:
+------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------+--------------+-------------+---------+-------------------| | clientcode | 8 | 0 | 0 | 1 | +------------+--------------+-------------+---------+-------------------+
Zoals verwacht is het hernoemd zoals gespecificeerd.