Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erweiterte TYPE_NAME-Funktion, die Datenlänge enthält

Ein grober Anfang wäre etwa so:

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)

Beachten Sie, dass dies nur für char-Datentypen wirklich gut ist und nur die Länge behandelt. Sie müssten etwas mehr Logik implementieren, wenn Sie Genauigkeit (Dezimalstellen usw.) verwenden möchten.

Außerdem möchten Sie möglicherweise eine Validierung hinzufügen, um bei bestimmten Benutzertypen nur die Länge -1 zuzulassen

(Aus reiner Neugier – warum wollen Sie das tun?)