sql >> Databasteknik >  >> RDS >> Sqlserver

Utökad funktion TYPE_NAME som inkluderar datalängd

En tuff start skulle vara ungefär så här:

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)

Observera att detta bara är riktigt bra för char-datatyper och bara hanterar längd. Du måste implementera lite mer logik om du vill använda precision (decimaler etc)

Du kanske också vill lägga till validering för att endast tillåta -1 längd på vissa användartyper

(För nyfikenhetens skull – varför vill du göra det här?)



  1. skriva tabeller till Postgresql med rPostgreSQL när databasnamnet består av versaler

  2. Kan inte ansluta till MySQL från Java:NullPointerException inuti MySQL-drivrutinanslutningslogiken

  3. SQL-timmar i genomsnitt på 24 timmar

  4. [Video] Dataintegration med PostgreSQL