Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Listar todas as colunas anuláveis ​​em um banco de dados SQL Server


As colunas anuláveis ​​em um banco de dados às vezes podem levar a problemas de desempenho. Isso definitivamente não quer dizer que as colunas anuláveis ​​sempre causarão problemas de desempenho, mas se você tiver problemas de desempenho, identificar colunas anuláveis ​​pode fornecer algumas pistas sobre onde está o problema. Às vezes, tornando uma coluna NOT NULL pode ajudar a melhorar o desempenho.

Por “colunas anuláveis” quero dizer, colunas que permitem NULL. Se a definição da coluna não incluir NOT NULL , então ele permite valores NULL e é “anulável”.

Abaixo está o código que permite listar todas as colunas anuláveis ​​em um banco de dados no SQL Server.


Exemplo 1 – INFORMAÇÕES_ESQUEMA.COLUNAS


Essa visualização do esquema de informações lista todas as colunas que podem ser acessadas pelo usuário atual no banco de dados atual. Tem uma coluna chamada IS_NULLABLE . Se a coluna relevante permitir NULL, esta coluna retornará YES . Caso contrário, NÃO é devolvido.
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES';

Isso lista todas as colunas da exibição.

Exemplo 2 – INFORMATION_SCHEMA.COLUMNS com menos colunas especificadas


Você pode não querer que todas as colunas sejam retornadas da exibição. Aqui está um exemplo com menos colunas retornadas.
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;

Exemplo 3 – Usando sys.columns


Se você não quiser usar o INFORMATION_SCHEMA.COLUMNS view, então você pode consultar o sys.columns ver em vez disso.

No entanto, você precisará fazer algumas junções se quiser retornar as tabelas e/ou esquema, etc.

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