Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozszerzona funkcja TYPE_NAME zawierająca długość danych

Trudny początek wyglądałby mniej więcej tak:

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)

Zauważ, że jest to naprawdę dobre tylko dla typów danych typu char i obsługuje tylko długość. Musisz zaimplementować nieco więcej logiki, jeśli chcesz użyć precyzji (liczby dziesiętne itp.)

Możesz także dodać walidację, aby zezwalać tylko na długość -1 dla niektórych typów użytkowników

(Z ciekawości – dlaczego chcesz to zrobić?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SUBSTRING Polecenie w SQL:elementarz

  2. Numer seryjny daty w SQL?

  3. TransactSQL do uruchomienia innego skryptu TransactSQL

  4. SQL Server, Python i OS X

  5. Dostosuj alarmy Spotlight Cloud