Грубо начало би било нещо подобно:
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)
Обърнете внимание, че това е наистина добро само за типове данни char и обработва само дължина. Ще трябва да приложите малко повече логика, ако искате да използвате точност (десетични знаци и т.н.)
Освен това може да искате да добавите проверка, за да разрешите само дължина -1 за определени потребителски типове
(Заради любопитството – защо искате да направите това?)