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];