sql >> Database >  >> RDS >> Sqlserver

Wat betekent FixedLenNullInSource in sp_help?

In SQL Server 2008 is de definitie van sp_help laat zien dat dit hard gecodeerd is om "ja" te retourneren als de kolom nullable is en een van 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 

In SQL Server 2000 is het anders gedefinieerd als

   '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

De betekenis van de stats bits in syscolumns in SQL Server 2000 is niet volledig gedocumenteerd, maar ik vond een SQL Server 7.0 SP4 upgradescript die de kolomwaarden als volgt instelt (0x20 =32 in decimalen)

+ 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

Ik kon niet veel aanvullende informatie vinden toen ik googlede naar COL_FIXEDNULL of COL_NONSQLSUB maar ontdekte dat de opslag van NULL waarden voor datatypes met een vaste lengte zijn gewijzigd in SQL Server 7. In eerdere versies werden nullable datatypes met een vaste lengte stil geconverteerd naar variabel volgens de volgende tabel.

+----------------------------+-----------+
| char                       | varchar   |
| nchar                      | nvarchar  |
| binary                     | varbinary |
| datetime                   | datetimn  |
| float                       | floatn     |
| int, smallint, and tinyint | intn      |
| decimal                    | decimaln  |
| numeric                    | numericn  |
| money and smallmoney       | moneyn    |
+----------------------------+-----------+

Dit wordt besproken voor SQL Server in KB 463166 (alleen beschikbaar in het Frans ) en uit de Sybase-documentatie blijkt dat dit nog steeds het geval in dat product .

Vanaf SQL Server 7.0 en verder een NULL CHAR(100) kolom nam het geheel van de gedeclareerde vaste kolomlengte in het datagedeelte van de rij met vaste lengte in beslag (totdat in 2008 schaarse kolommen werden geïntroduceerd - die het gedrag weer veranderen).

Ik neem aan dat deze bit in syscolumns.status onderscheid gemaakt tussen de twee verschillende opslagformaten.




  1. Genereren van een geordende sequentierang op complexe query

  2. hoe pgsql-script in pgAdmin uit te voeren?

  3. Waarom is lang een probleem met Oracle?

  4. 4 manieren om alle weergaven in een MariaDB-database weer te geven