Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Funzione TYPE_NAME estesa che include datalength

Un inizio difficile sarebbe qualcosa del genere:

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)

Nota che questo è davvero buono solo per i tipi di dati char e gestisce solo la lunghezza, dovresti implementare un po 'più di logica se vuoi usare la precisione (decimali ecc.)

Inoltre, potresti voler aggiungere la convalida per consentire solo la lunghezza -1 su determinati tipi di utenti

(Per curiosità, perché vuoi farlo?)