sql >> Base de Datos >  >> RDS >> Sqlserver

Función TYPE_NAME extendida que incluye longitud de datos

Un comienzo difícil sería algo como esto:

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)

Tenga en cuenta que esto solo es realmente bueno para los tipos de datos char y solo maneja la longitud. Necesitaría implementar un poco más de lógica si desea usar precisión (decimales, etc.)

Además, es posible que desee agregar la validación para permitir solo una longitud de -1 en ciertos tipos de usuarios

(Por curiosidad, ¿por qué quieres hacer esto?)