En SQL Server, puede usar sp_rename
procedimiento almacenado para cambiar el nombre de un objeto creado por el usuario en la base de datos actual, incluido un tipo de datos definido por el usuario.
Sintaxis
La sintaxis es así:
EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';
Donde old_datatype
es el nombre del tipo de datos definido por el usuario al que le gustaría cambiar el nombre, y new_datatype
es el nuevo nombre que le quieres dar.
Ejemplo
Echemos un vistazo a los tipos de datos definidos por el usuario actuales en nuestra base de datos.
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Resultado:
+----------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |----------+--------------+-------------+---------+-------------------| | clientid | 8 | 0 | 0 | 1 | +----------+--------------+-------------+---------+-------------------+
Tenemos un tipo de datos definido por el usuario llamado clientid
.
Vamos a cambiarle el nombre a clientcode
.
EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';
Ejecutar eso lo renombra a clientcode
. Es posible que vea el siguiente mensaje:
Caution: Changing any part of an object name could break scripts and stored procedures.
Básicamente, esto nos advierte que si tenemos secuencias de comandos de procedimientos almacenados que hacen referencia a nuestro objeto renombrado, se romperán y tendremos que actualizarlos.
Quizás se pregunte si esto significa que las columnas existentes que usan este tipo de datos ahora se romperán.
Afortunadamente, las columnas existentes deberían estar bien.
Después de cambiar el nombre del tipo de datos definido por el usuario, cualquier columna que use ese tipo de datos continuará usando ese tipo de datos con su nuevo nombre. Cualquier restricción del tipo de datos (como la longitud, etc.) se sigue aplicando.
Ahora revisemos nuestra lista de tipos de datos definidos por el usuario nuevamente:
SELECT
name,
max_length,
[precision],
scale,
is_user_defined
FROM sys.types
WHERE is_user_defined = 1;
Resultado:
+------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------+--------------+-------------+---------+-------------------| | clientcode | 8 | 0 | 0 | 1 | +------------+--------------+-------------+---------+-------------------+
Como era de esperar, ha sido renombrado como se especifica.