Nullbara kolumner i en databas kan ibland leda till prestandaproblem. Det är definitivt inte att säga att null-kolumner alltid kommer att orsaka prestandaproblem, men om du råkar ha prestandaproblem, kan identifiering av null-kolumner potentiellt ge några ledtrådar om var problemet ligger. Gör ibland en kolumn NOT NULL
kan hjälpa till att förbättra prestandan.
Med "nullbara kolumner" menar jag kolumner som tillåter NULL. Om kolumnens definition inte inkluderar NOT NULL
, då tillåter den NULL-värden och den är "nullbar".
Nedan finns kod som låter dig lista alla nullbara kolumner i en databas i SQL Server.
Exempel 1 – INFORMATION_SCHEMA.COLUMNS
Denna informationsschemavy listar alla kolumner som kan nås av den aktuella användaren i den aktuella databasen. Den har en kolumn som heter IS_NULLABLE
. Om den relevanta kolumnen tillåter NULL, returnerar denna kolumn
JA
. Annars
NEJ
returneras.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Detta listar alla kolumner från vyn.
Exempel 2 – INFORMATION_SCHEMA.COLUMNS med färre angivna kolumner
Du kanske inte vill att alla kolumner ska returneras från vyn. Här är ett exempel med färre kolumner som returneras.
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;
Exempel 3 – Använda sys.columns
Om du inte vill använda INFORMATION_SCHEMA.COLUMNS
view, sedan kan du fråga sys.columns
se istället.
Du måste dock göra några kopplingar om du vill returnera tabellerna och/eller schemat etc.
Exempel:
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];