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