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

Udvidet TYPE_NAME-funktion, der inkluderer datalængde

En barsk start ville være noget som dette:

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)

Bemærk, at dette kun er rigtig godt for char-datatyper og kun håndterer længde. Du skal implementere lidt mere logik, hvis du vil bruge præcision (decimaler osv.)

Du vil måske også tilføje validering for kun at tillade -1 længde på visse brugertyper

(For nysgerrighedens skyld – hvorfor vil du gøre det?)



  1. mysqli - Behøver jeg virkelig at gøre $result->close(); &$mysqli->close();?

  2. Ukendt tabel i MULTI DELETE

  3. Indsæt NULL i en PostgreSQL DB via PHP, når et datofelt er tomt

  4. Dvale gemmer ikke objekt i databasen?