SQL Server 2008では、sp_help
の定義 列がnull許容で、varbinary
のいずれかである場合、これが「yes」を返すようにハードコードされていることを示しています 、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
SQL Server 2000では、
とは異なる方法で定義されています。 '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
stats
の意味 syscolumns
のビット SQL Server 2000のドキュメントは完全には文書化されていませんが、 SQL Server7.0SP4アップグレードスクリプト
が見つかりました。 これにより、列の値が次のように設定されます(0x20
=32
10進数)
+ 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
どちらのCOL_FIXEDNULL
をグーグルで検索しても、追加情報があまり見つかりませんでした。 またはCOL_NONSQLSUB
しかし、NULL
のストレージが SQL Server 7で変更された固定長データ型の値。以前のバージョンでは、null許容の固定長データ型は次の表のようにサイレントに変数に変換されていました。
+----------------------------+-----------+
| char | varchar |
| nchar | nvarchar |
| binary | varbinary |
| datetime | datetimn |
| float | floatn |
| int, smallint, and tinyint | intn |
| decimal | decimaln |
| numeric | numericn |
| money and smallmoney | moneyn |
+----------------------------+-----------+
これについては、SQLServerのKB463166(フランス語でのみ利用可能 )で説明されています。 )およびSybaseのドキュメントを見ると、その製品の場合も 。
SQL Server 7.0以降、NULL
CHAR(100)
列は、行の固定長データセクションで宣言された固定列の長さ全体を占めていました(2008年にスパース列が導入されるまで、動作が再び変更されます)。
このbit
だと思います syscolumns.status
内 2つの異なるストレージ形式を区別しました。