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