sql >> Database >  >> RDS >> Sqlserver

Uitgebreide TYPE_NAME-functie met datalengte

Een ruwe start zou ongeveer als volgt zijn:

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)

Merk op dat dit alleen echt goed is voor char-gegevenstypen en alleen de lengte behandelt. Je zou wat meer logica moeten implementeren als je precisie wilt gebruiken (decimalen, enz.)

U kunt ook validatie toevoegen om alleen -1 lengte toe te staan ​​voor bepaalde gebruikerstypen

(Voor de nieuwsgierigheid – waarom wil je dit doen?)



  1. RUIMTELIJKE gegevens migreren van Oracle naar Postgresql

  2. Dubbele records vinden in PostgreSQL

  3. wat is het verschil tussen UNIEKE INDEX en UNIEKE SLEUTEL?

  4. Invoegen in dezelfde tabel trigger mysql