Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разширена функция TYPE_NAME, която включва дължина на данните

Грубо начало би било нещо подобно:

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)

Обърнете внимание, че това е наистина добро само за типове данни char и обработва само дължина. Ще трябва да приложите малко повече логика, ако искате да използвате точност (десетични знаци и т.н.)

Освен това може да искате да добавите проверка, за да разрешите само дължина -1 за определени потребителски типове

(Заради любопитството – защо искате да направите това?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Нуждаете се от помощ с оператора Merge

  2. Как да преброя в SQL всички полета с нулеви стойности в един запис?

  3. как да принудително инсталирам студио за управление?

  4. В реферираната таблица няма първични или кандидат-ключове, които да съответстват на списъка с референтни колони във външния ключ

  5. Как да игнорирате html тагове в Sql Server 2008 Full Text Search