Un début difficile serait quelque chose comme ça :
CREATE FUNCTION udf_GetDataTypeAsString
(
@user_type_id INT ,
@Length INT
)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @ReturnStr VARCHAR(50)
IF @Length = -1
SELECT @ReturnStr = UPPER(name) + '(MAX)'
FROM sys.types
WHERE user_type_id = @user_type_id
ELSE
SELECT @ReturnStr = UPPER(name) + '(' + CONVERT(VARCHAR, @Length) + ')'
FROM sys.types
WHERE user_type_id = @user_type_id
RETURN @ReturnStr
END
GO
SELECT dbo.udf_GetDataTypeAsString(167, -1)
--#### Returns VARCHAR(MAX)
SELECT dbo.udf_GetDataTypeAsString(231, 24)
--#### Returns NVARCHAR(24)
Notez que cela n'est vraiment bon que pour les types de données char et ne gère que la longueur, vous devrez implémenter un peu plus de logique si vous souhaitez utiliser la précision (décimales, etc.)
En outre, vous pouvez ajouter une validation pour autoriser uniquement la longueur -1 sur certains types d'utilisateurs
(Par curiosité, pourquoi voulez-vous faire cela ?)