sql >> Database teknologi >  >> RDS >> Sqlserver

Vis alle nullbare kolonner i en SQL Server-database

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

  1. Easysoft frigiver ODBC-ODBC Bridge til Windows 10

  2. Skal jeg oprette indekser på fremmednøgler på Oracle?

  3. hvordan ser et B-træindeks på mere end 1 kolonne ud?

  4. Pakken har allerede sendt 50 toasts. Viser ikke mere