Nullable-kolommen in een database kunnen soms leiden tot prestatieproblemen. Dat wil zeker niet zeggen dat kolommen met nullwaarden altijd prestatieproblemen zullen veroorzaken, maar als u toch prestatieproblemen ondervindt, kan het identificeren van nullable-kolommen mogelijk enige aanwijzingen geven over waar het probleem ligt. Soms maakt u een kolom NOT NULL kan helpen de prestaties te verbeteren.
Met "nullable kolommen" bedoel ik kolommen die NULL toestaan. Als de definitie van de kolom niet NOT NULL bevat , dan staat het NULL-waarden toe en is het "nullable".
Hieronder vindt u code waarmee u alle nullable-kolommen in een database in SQL Server kunt weergeven.
Voorbeeld 1 – INFORMATION_SCHEMA.COLUMNS
Deze weergave van het informatieschema bevat alle kolommen die toegankelijk zijn voor de huidige gebruiker in de huidige database. Het heeft een kolom genaamd IS_NULLABLE . Als de relevante kolom NULL toestaat, retourneert deze kolom
YES
. Anders
NEE
wordt geretourneerd.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Hiermee worden alle kolommen uit de weergave weergegeven.
Voorbeeld 2 – INFORMATION_SCHEMA.COLUMNS met minder kolommen gespecificeerd
Mogelijk wilt u niet dat alle kolommen uit de weergave worden geretourneerd. Hier is een voorbeeld met minder geretourneerde kolommen.
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;
Voorbeeld 3 – sys.columns gebruiken
Als u de INFORMATION_SCHEMA.COLUMNS . niet wilt gebruiken bekijken, dan kunt u de sys.columns . opvragen bekijk in plaats daarvan.
U moet echter enkele joins uitvoeren als u de tabellen en/of het schema, enz. wilt retourneren.
Voorbeeld:
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];