sql >> データベース >  >> RDS >> Sqlserver

sp_helpのFixedLenNullInSourceはどういう意味ですか?

    SQL Server 2008では、sp_helpの定義 列がnull許容で、varbinaryのいずれかである場合、これが「yes」を返すようにハードコードされていることを示しています 、varcharbinarychar

       '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つの異なるストレージ形式を区別しました。




    1. ツリー形式のMYSQL出力またはレベルの追加(親-子)

    2. MS-Accessの基本クラスと派生オブジェクト

    3. インデックスを使用しないIN句

    4. 全文検索条件「control of」の「of」付近の構文エラー