Một khởi đầu khó khăn sẽ như thế này:
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)
Lưu ý rằng điều này chỉ thực sự tốt cho các kiểu dữ liệu char và chỉ xử lý độ dài, Bạn sẽ cần triển khai logic hơn một chút nếu bạn muốn sử dụng độ chính xác (số thập phân, v.v.)
Ngoài ra, bạn có thể muốn thêm xác thực để chỉ cho phép độ dài -1 trên một số loại người dùng nhất định
(Vì lý do tò mò - tại sao bạn muốn làm điều này?)