2016-12-13 1 views
2

Nur meine Neugierde zu füttern:Warum ist das Feld IS_NULLABLE in INFORMATION_SCHEMA_COLUMNS ein VARCHAR und nicht ein BIT?

Wenn Sie an der Struktur der Tabelle aussehen INFORMATION_SCHEMA_COLUMNS auf SQL Server, können Sie sehen, dass die Spalte IS_NULLABLE wie unten aussieht:

/-------------------------------------------\ 
| Column_name | Type | Computed | Length | 
|-------------+---------+----------+--------| 
| IS_NULLABLE | varchar | no | 3 | 
\-------------------------------------------/ 

In meinem Kopf, wenn Sie Möchten Sie einen booleschen Wert speichern, ist der beste zu verwendende Datentyp BIT.

Warum also haben die SQL Server-Entwickler eine VARCHAR verwendet, um einen booleschen Wert zu speichern?

Ist der Grund historisch? Vielleicht existiert der BIT Datentyp nicht?

Antwort

0

Erstens, sie haben nicht much choice:

Die Informationen Schema Ansichten, die in SQL Server entsprechen dem ISO-Standard-Definition für die INFORMATION_SCHEMA.

Das heißt, die INFORMATION_SCHEMA Ansichten sind standardized über SQL-Produkte - sie wurden nur für SQL Server nicht erfunden (dies auch ist, warum sie, die nicht viele Informationen enthalten, ist produktspezifisch)

Darüber hinaus wurden diese Ansichten gut standardisiert vor wurde ein tatsächlicher boolescher Datentyp zum SQL Standard hinzugefügt (INFORMATON_SCHEMA existiert mindestens so weit zurück wie der 1992-Standard. Boolean wurde als optionaler Datentyp im 1999-Standard hinzugefügt).Beachten Sie, dass bit nicht wirklich ein boolescher Datentyp ist (und es ist kein Standard) - er wird stattdessen in der Dokumentation als numerischer Typ definiert.

+0

Ich war nicht so weit. :) Danke für diese Erklärung. – MiniKeb

0

Hinter den Abdeckungen, Information_schema.columns wird immer Daten von sys.columns, können Sie das gleiche sehen

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

In Sys.columns haben sie Is_nullable Spalte als BIT verwendet , aber in [INFORMATION_SCHEMA.COLUMNS] haben sie es verallgemeinert wie unten

convert(varchar(3), CASE c.is_nullable 
WHEN 1 THEN 'YES' ELSE 'NO' END) AS IS_NULLABLE 

Wie pro meinem Verständnis, Sie könnten die Informationen verallgemeinert haben, eher dann in dieser Ansicht nur 1 oder 0 zeigen ..

auch diese Frage Pass auf, in Unterschiede zwischen diesen beiden Ansichten zu wissen

https://dba.stackexchange.com/questions/72742/why-do-sys-columns-and-information-schema-columns-display-different-number-of-co

0

Sie meinen wahrscheinlich INFORMATION_SCHEMA.COLUMNS, und das ist eine Ansicht (keine TABELLE), beabsichtigt, um lesbare Informationen zu geben.

Die Spalte IS_NULLABLE in dieser Ansicht gibt YES oder NO zurück, was zu lesen ist, dass Menschen lesbarer sind als die zugrunde liegenden 1 und 0 Werte.

Darüber hinaus gibt es einen ANSI-Standard, der INFORMATION_SCHEMA.* regelt und gemäß diesem Standard müssen YES und NO angezeigt werden.

+0

Vielen Dank für die Klarstellung. – MiniKeb

Verwandte Themen