Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Função TYPE_NAME estendida que inclui comprimento de dados


Um começo difícil seria algo assim:
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)

Observe que isso só é realmente bom para tipos de dados char e apenas lida com comprimento, você precisaria implementar um pouco mais de lógica se quiser usar precisão (decimais etc)

Além disso, você pode querer adicionar validação para permitir apenas o comprimento -1 em determinados tipos de usuário

(Por uma questão de curiosidade - por que você quer fazer isso?)