В SQL Server можете да използвате sp_rename
съхранена процедура за преименуване на обект, създаден от потребител, в текущата база данни, включително потребителски дефиниран тип данни.
Синтаксис
Синтаксисът е така:
EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';
Където old_datatype
е името на дефинирания от потребителя тип данни, който искате да преименувате, и new_datatype
е новото име, което искате да му дадете.
Пример
Нека да разгледаме текущите дефинирани от потребителя типове данни в нашата база данни.
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Резултат:
+----------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |----------+--------------+-------------+---------+-------------------| | clientid | 8 | 0 | 0 | 1 | +----------+--------------+-------------+---------+-------------------+
Имаме един потребителски дефиниран тип данни, наречен clientid
.
Нека го преименуваме на clientcode
.
EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';
Изпълнението го преименува на clientcode
. Може да видите следното съобщение:
Caution: Changing any part of an object name could break scripts and stored procedures.
Това основно ни дава предубеждения, че ако имаме някакви скриптове на съхранени процедури, които препращат към нашия преименуван обект, те ще се счупят и ще трябва да ги актуализираме.
Може да се чудите дали това означава, че всички съществуващи колони, които използват този тип данни, сега ще бъдат повредени?
За щастие съществуващите колони трябва да са добре.
След преименуване на дефинирания от потребителя тип данни, всички колони, които използват този тип данни, ще продължат да използват този тип данни с новото му име. Всички ограничения на типа данни (като дължина и т.н.) продължават да се прилагат.
Сега нека отново проверим нашия списък с дефинирани от потребителя типове данни:
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Резултат:
+------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------+--------------+-------------+---------+-------------------| | clientcode | 8 | 0 | 0 | 1 | +------------+--------------+-------------+---------+-------------------+
Както се очакваше, той беше преименуван, както е посочено.