Ein grober Anfang wäre etwa so:
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)
Beachten Sie, dass dies nur für char-Datentypen wirklich gut ist und nur die Länge behandelt. Sie müssten etwas mehr Logik implementieren, wenn Sie Genauigkeit (Dezimalstellen usw.) verwenden möchten.
Außerdem möchten Sie möglicherweise eine Validierung hinzufügen, um bei bestimmten Benutzertypen nur die Länge -1 zuzulassen
(Aus reiner Neugier – warum wollen Sie das tun?)