Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa yang dimaksud dengan FixedLenNullInSource di sp_help?

Dalam SQL Server 2008 definisi sp_help menunjukkan ini di-hardcode untuk mengembalikan "ya" jika kolomnya nullable dan salah satu dari 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 

Dalam SQL Server 2000 didefinisikan secara berbeda sebagai

   '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

Arti dari stats bit dalam syscolumns di SQL Server 2000 tidak sepenuhnya didokumentasikan tetapi saya menemukan skrip pemutakhiran SQL Server 7.0 SP4 yang menetapkan nilai kolom sebagai berikut (0x20 =32 dalam desimal)

+ 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

Saya tidak dapat menemukan banyak informasi tambahan saat googling untuk salah satu COL_FIXEDNULL atau COL_NONSQLSUB tetapi menemukan bahwa penyimpanan NULL nilai untuk tipe data panjang tetap diubah di SQL Server 7. Pada versi sebelumnya, tipe data panjang tetap yang dapat dibatalkan secara diam-diam dikonversi ke variabel sesuai tabel berikut.

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

Ini dibahas untuk SQL Server di KB 463166 (hanya tersedia dalam bahasa Prancis ) dan dari melihat dokumentasi Sybase tampaknya masih demikian pada produk tersebut .

Dari SQL Server 7.0 dan seterusnya sebuah NULL CHAR(100) kolom mengambil seluruh panjang kolom tetap yang dideklarasikan di bagian data panjang tetap dari baris (sampai kolom jarang diperkenalkan pada tahun 2008 - yang mengubah perilaku lagi).

Saya menganggap bahwa bit . ini di syscolumns.status membedakan antara dua format penyimpanan yang berbeda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pisahkan nilai pada beberapa baris

  2. Cara Menampilkan Kolasi Server di SQL Server (T-SQL)

  3. Apa SqlDbType yang dipetakan ke varBinary(max)?

  4. OLTP Dalam Memori:Apa yang baru di SQL Server 2016

  5. SQL Server BIT Datatype – Panduan Utama