sql >> Databasteknik >  >> RDS >> Sqlserver

Lista alla nullbara kolumner i en SQL Server-databas

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

  1. DATEDIFF_BIG() Exempel i SQL Server

  2. Oracle SQL för att ändra kolumntyp från nummer till varchar2 medan den innehåller data

  3. PostgreSQL:Fulltextsökning - Hur söker man i delord?

  4. Hur man konverterar en Unix-tidsstämpel till ett datum-/tidsvärde i SQL Server