Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co oznacza FixedLenNullInSource w sp_help?

W SQL Server 2008 definicja sp_help pokazuje, że jest to zakodowane na sztywno, aby zwrócić "tak", jeśli kolumna ma wartość null i jedną z 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 

W SQL Server 2000 jest inaczej definiowany jako

   '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

Znaczenie stats bity w syscolumns w SQL Server 2000 nie jest w pełni udokumentowany, ale znalazłem skrypt aktualizacji SQL Server 7.0 SP4 który ustawia wartości kolumn w następujący sposób (0x20 =32 dziesiętnie)

+ 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

Nie mogłem znaleźć zbyt wielu dodatkowych informacji podczas wyszukiwania w Google opcji COL_FIXEDNULL lub COL_NONSQLSUB ale dowiedziałem się, że przechowywanie NULL wartości dla typów danych o stałej długości zmienione w SQL Server 7. W poprzednich wersjach typy danych o stałej długości z wartościami null zostały po cichu przekonwertowane na zmienne zgodnie z poniższą tabelą.

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

Jest to omówione w przypadku SQL Server w KB 463166 (dostępne tylko w języku francuskim ) i z dokumentacji Sybase wynika, że ​​jest to nadal w tym produkcie .

Od SQL Server 7.0 wzwyż NULL CHAR(100) kolumna zajęła całą zadeklarowaną stałą długość kolumny w sekcji danych o stałej długości wiersza (do czasu wprowadzenia rzadkich kolumn w 2008 r. - co ponownie zmienia zachowanie).

Zakładam, że ten bit w syscolumns.status rozróżnia się dwa różne formaty przechowywania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać wynik instrukcji SQL do pliku CSV?

  2. Funkcja krzyża tabulacji SQL

  3. Jak sprawdzić zgodność bazy danych SQL Server po przestarzałej funkcji sp_dbcmptlevel?

  4. Zwróć liczbę wierszy, których dotyczą instrukcje UPDATE

  5. Zrozumienie rozmiaru pamięci „czas” w SQL Server