Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hàm TYPE_NAME mở rộng bao gồm cường độ dữ liệu

Một khởi đầu khó khăn sẽ như thế này:

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)

Lưu ý rằng điều này chỉ thực sự tốt cho các kiểu dữ liệu char và chỉ xử lý độ dài, Bạn sẽ cần triển khai logic hơn một chút nếu bạn muốn sử dụng độ chính xác (số thập phân, v.v.)

Ngoài ra, bạn có thể muốn thêm xác thực để chỉ cho phép độ dài -1 trên một số loại người dùng nhất định

(Vì lý do tò mò - tại sao bạn muốn làm điều này?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự sai trong Hàm có giá trị bảng (giữ thứ tự của một CTE đệ quy)

  2. SQL Thêm khóa ngoại vào cột hiện có

  3. SQL Server 2000 sang 2008 Migration - ORDER BY Sự cố khi sử dụng DISTINCT

  4. SQL Server 2008 so sánh hai bảng trong cùng một cơ sở dữ liệu và cột nhận được thay đổi

  5. Mẹo sử dụng SQL Server với Salesforce SOQL