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

FixedLenNullInSource trong sp_help có nghĩa là gì?

Trong SQL Server 2008, định nghĩa của sp_help cho thấy điều này được mã hóa cứng để trả về "có" nếu cột là nullable và một trong varbinary , varchar , binary , char

   'FixedLenNullInSource' = 
   CASE
        WHEN Type_name(system_type_id) NOT IN ( 'varbinary', 'varchar', 
                                                'binary', 'char' ) THEN '(n/a)'
        WHEN is_nullable = 0 THEN @no
        ELSE @yes
    END 

Trong SQL Server 2000, nó được định nghĩa theo cách khác là

   'FixedLenNullInSource' = case  
      when type_name(xtype) not in ('varbinary','varchar','binary','char')  
       Then '(n/a)'  
      When status & 0x20 = 0 Then @no  
      Else @yes END
      /* ... */
      from syscolumns

Ý nghĩa của stats các bit trong syscolumns trong SQL Server 2000 không được ghi lại đầy đủ nhưng tôi đã tìm thấy một tập lệnh nâng cấp SQL Server 7.0 SP4 đặt các giá trị cột như sau (0x20 =32 trong số thập phân)

+ CASE WHEN (type_name(xtype) IN ('text', 'image')
                                AND (colstat & 0x2000)!=0)
                            OR (type_name(xtype) IN ('binary', 'char', 'timestamp')
                                AND (typestat&1)=0 )
                            THEN 32 ELSE 0 END      -- COL_FIXEDNULL, COL_NONSQLSUB

Tôi không thể tìm thấy nhiều thông tin bổ sung khi googling cho COL_FIXEDNULL hoặc COL_NONSQLSUB nhưng đã phát hiện ra rằng việc lưu trữ NULL các giá trị cho các kiểu dữ liệu có độ dài cố định đã thay đổi trong SQL Server 7. Trong các phiên bản trước, các kiểu dữ liệu có độ dài cố định nullable đã được chuyển đổi âm thầm thành biến theo bảng sau.

+----------------------------+-----------+
| char                       | varchar   |
| nchar                      | nvarchar  |
| binary                     | varbinary |
| datetime                   | datetimn  |
| float                       | floatn     |
| int, smallint, and tinyint | intn      |
| decimal                    | decimaln  |
| numeric                    | numericn  |
| money and smallmoney       | moneyn    |
+----------------------------+-----------+

Điều này được thảo luận cho Máy chủ SQL trong KB 463166 ( chỉ có sẵn bằng tiếng Pháp ) và khi xem tài liệu Sybase, có vẻ như vẫn là trường hợp trong sản phẩm đó .

Từ SQL Server 7.0 trở đi, NULL CHAR(100) cột chiếm toàn bộ chiều dài cột cố định đã khai báo trong phần dữ liệu độ dài cố định của hàng (cho đến khi các cột thưa thớt được giới thiệu vào năm 2008 - điều này lại thay đổi hành vi).

Tôi cho rằng bit này trong syscolumns.status phân biệt giữa hai định dạng lưu trữ khác nhau.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 11 Phương pháp hay nhất về chỉ mục SQL Server để cải thiện hiệu suất

  2. SQL Server OFFSET tương đương

  3. Tổng quan về câu lệnh PRINT trong SQL Server

  4. Cắt giảm chi phí cấp phép SQL Server

  5. Từ khoá Không được Hỗ trợ:Siêu dữ liệu