sql >> Databáze >  >> RDS >> Sqlserver

Rozšířená funkce TYPE_NAME, která zahrnuje délku dat

Hrubý začátek by byl něco takového:

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)

Všimněte si, že je to opravdu dobré pouze pro datové typy char a zpracovává pouze délku. Pokud chcete použít přesnost (desítková čísla atd.), budete muset implementovat trochu více logiky

Možná budete chtít přidat ověření, abyste povolili pouze délku -1 u určitých typů uživatelů

(Pro zajímavost – proč to chcete udělat?)



  1. Zobrazte tabulku ve smyčce foreach s databázovými hodnotami

  2. Skupiny zabezpečení DB lze přidružit pouze k instancím VPC DB pomocí verzí rozhraní API

  3. jak získat rok a den v roce pomocí serveru SQL

  4. Datový typ npgsql neznámý při použití group by