Sql server sp_帮助中的FixedLenNullInSource是什么意思?

Sql server sp_帮助中的FixedLenNullInSource是什么意思?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,环顾FixedLenNullInSource是为了与SQL 2000兼容,但它实际上意味着什么?在SQL Server 2008中,sp\u help的定义显示,如果列可为null,并且是varbinary,varchar,binary,char中的一个,则此函数将被硬编码为返回“yes” 'FixedLenNullInSource' = CASE WHEN Type_name(system_type_id) NOT IN ( 'varbinary', 'varch

环顾FixedLenNullInSource是为了与SQL 2000兼容,但它实际上意味着什么?

在SQL Server 2008中,
sp\u help
的定义显示,如果列可为null,并且是
varbinary
varchar
binary
char
中的一个,则此函数将被硬编码为返回“yes”

   '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
SQL Server 2000中
syscolumns
stats
位的含义没有完整的文档记录,但我找到了一个设置列值的方法,如下所示(
0x20
=
32
,十进制)

在谷歌搜索
COL\u FIXEDNULL
COL\u 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    |
+----------------------------+-----------+
在KB 463166()中讨论了SQL Server的这一点,从Sybase文档中可以看出这一点

从SQL Server 7.0开始,一个
NULL
CHAR(100)
列占据了行的固定长度数据部分中声明的整个固定列长度(直到2008年引入稀疏列,这再次改变了行为)


我假定
syscolumns.status中的
在两种不同的存储格式之间有所区别。

即使在2000年BOL中,它也列为。您可能需要找到更早期版本的文档。感谢Martin Smith,他一直在努力查找SQL server 7.0文档中的含义,但似乎随着时间的推移,这些含义已经丢失了!我不知道有没有老学究知道这是什么意思?这些天来,它实际上似乎没有什么意义。如果列可为空且
'varbinary',varchar',binary',char',char'
之一,则硬编码返回“yes”。谢谢@MartinSmith。您应该将您的评论作为答案弹出。这对我来说已经足够好了,我会把它标记为答案。答案很好,谢谢@Martin,谢谢你提供的额外细节。
+----------------------------+-----------+
| char                       | varchar   |
| nchar                      | nvarchar  |
| binary                     | varbinary |
| datetime                   | datetimn  |
| float                       | floatn     |
| int, smallint, and tinyint | intn      |
| decimal                    | decimaln  |
| numeric                    | numericn  |
| money and smallmoney       | moneyn    |
+----------------------------+-----------+