Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonction TYPE_NAME étendue qui inclut la longueur de données

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 ?)