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.