Nullable-Spalten in einer Datenbank können manchmal zu Leistungsproblemen führen. Das soll definitiv nicht heißen, dass Nullable-Spalten immer Leistungsprobleme verursachen, aber wenn Sie Leistungsprobleme haben, kann die Identifizierung von Nullable-Spalten möglicherweise einige Hinweise darauf geben, wo das Problem liegt. Manchmal wird eine Spalte NOT NULL
kann helfen, die Leistung zu verbessern.
Mit „Nullable-Spalten“ meine ich Spalten, die NULL zulassen. Wenn die Definition der Spalte NOT NULL
nicht enthält , dann lässt es NULL-Werte zu und ist „nullable“.
Unten ist Code, mit dem Sie alle Nullable-Spalten in einer Datenbank in SQL Server auflisten können.
Beispiel 1 – INFORMATION_SCHEMA.COLUMNS
Diese Ansicht des Informationsschemas listet alle Spalten auf, auf die der aktuelle Benutzer in der aktuellen Datenbank zugreifen kann. Es hat eine Spalte namens IS_NULLABLE
. Wenn die relevante Spalte NULL zulässt, gibt diese Spalte
YES
zurück . Andernfalls
NEIN
zurückgegeben wird.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Dies listet alle Spalten aus der Ansicht auf.
Beispiel 2 – INFORMATION_SCHEMA.COLUMNS mit weniger angegebenen Spalten
Möglicherweise möchten Sie nicht, dass alle Spalten aus der Ansicht zurückgegeben werden. Hier ist ein Beispiel mit weniger zurückgegebenen Spalten.
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES' ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;
Beispiel 3 – Verwendung von sys.columns
Wenn Sie die INFORMATION_SCHEMA.COLUMNS
nicht verwenden möchten view, dann könnten Sie die sys.columns
abfragen stattdessen ansehen.
Sie müssen jedoch einige Verknüpfungen vornehmen, wenn Sie die Tabellen und/oder das Schema usw. zurückgeben möchten.
Beispiel:
SELECT SCHEMA_NAME(t.schema_id) AS [Schema], t.name AS [Table], c.name AS [Column], dc.definition AS [Column Default], ty.name AS [Data Type] FROM sys.tables AS t INNER JOIN sys.columns AS c ON t.object_id = c.object_id LEFT JOIN sys.types AS ty ON c.user_type_id = ty.user_type_id LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id WHERE c.is_nullable = 1 ORDER BY [Schema], [Table], [Column];