sql-server – sp_help中的FixedLenNullInSource是什么意思?

前端之家收集整理的这篇文章主要介绍了sql-server – sp_help中的FixedLenNullInSource是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看看FixedLenNullInSource是为了兼容sql 2000,但它究竟意味着什么?

解决方法

sql Server 2008中,sp_help的定义显示,如果列可以为空并且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','char')  
       Then '(n/a)'  
      When status & 0x20 = 0 Then @no  
      Else @yes END
      /* ... */
      from syscolumns

sql Server 2000中syscolumns中stats位的含义没有完整记录,但我发现了一个SQL Server 7.0 SP4 upgrade script,它将列值设置如下(0x20 =十进制32)

+ 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时找不到更多的附加信息,但确实发现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    |
+----------------------------+-----------+

有关sql Server的知识,请参见知识库文章463166(only available in French),以及查看出现的Sybase文档,即still the case in that product.

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

我假设syscolumns.status中的这个位区分了两种不同的存储格式.

原文链接:https://www.f2er.com/mssql/79901.html

猜你在找的MsSQL相关文章