Nullbare kolonner i en database kan nogle gange føre til ydeevneproblemer. Det er bestemt ikke til at sige, at nullbare kolonner altid vil forårsage problemer med ydeevnen, men hvis du tilfældigvis har problemer med ydeevnen, kan identifikationen af nullable kolonner potentielt give nogle fingerpeg om, hvor problemet ligger. Nogle gange laver en kolonne NOT NULL
kan hjælpe med at forbedre ydeevnen.
Med "nullbare kolonner" mener jeg kolonner, der tillader NULL. Hvis kolonnens definition ikke inkluderer NOT NULL
, så tillader den NULL-værdier, og den er "nullbar".
Nedenfor er kode, der giver dig mulighed for at liste alle nullbare kolonner i en database i SQL Server.
Eksempel 1 – INFORMATION_SCHEMA.COLUMNS
Denne informationsskemavisning viser alle kolonner, som den aktuelle bruger kan få adgang til i den aktuelle database. Den har en kolonne kaldet IS_NULLABLE
. Hvis den relevante kolonne tillader NULL, returnerer denne kolonne
JA
. Ellers
NEJ
er returneret.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Dette viser alle kolonner fra visningen.
Eksempel 2 – INFORMATION_SCHEMA.COLUMNS med færre specificerede kolonner
Du vil måske ikke have alle kolonner tilbage fra visningen. Her er et eksempel med færre kolonner returneret.
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;
Eksempel 3 – Brug af sys.columns
Hvis du ikke ønsker at bruge INFORMATION_SCHEMA.COLUMNS
view, så kan du forespørge på sys.columns
se i stedet.
Du skal dog lave nogle joinforbindelser, hvis du vil returnere tabellerne og/eller skemaet osv.
Eksempel:
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];