Las columnas anulables en una base de datos a veces pueden provocar problemas de rendimiento. Eso definitivamente no quiere decir que las columnas anulables siempre causen problemas de rendimiento, pero si tiene problemas de rendimiento, la identificación de columnas anulables puede proporcionar algunas pistas sobre dónde radica el problema. A veces, hacer una columna NOT NULL
puede ayudar a mejorar el rendimiento.
Por "columnas anulables" me refiero a columnas que permiten NULL. Si la definición de la columna no incluye NOT NULL
, luego permite valores NULL y es "anulable".
A continuación se muestra el código que le permite enumerar todas las columnas anulables en una base de datos en SQL Server.
Ejemplo 1:INFORMACIÓN_ESQUEMA.COLUMNAS
Esta vista de esquema de información enumera todas las columnas a las que puede acceder el usuario actual en la base de datos actual. Tiene una columna llamada IS_NULLABLE
. Si la columna relevante permite NULL, esta columna devuelve
YES
. De lo contrario,
NO
es devuelto.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Esto enumera todas las columnas de la vista.
Ejemplo 2:INFORMACIÓN_ESQUEMA.COLUMNAS con menos columnas especificadas
Es posible que no desee que se devuelvan todas las columnas de la vista. Aquí hay un ejemplo con menos columnas devueltas.
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;
Ejemplo 3:Uso de sys.columns
Si no desea utilizar el INFORMATION_SCHEMA.COLUMNS
vista, entonces podría consultar el sys.columns
ver en su lugar.
Sin embargo, deberá realizar algunas uniones si desea devolver las tablas y/o el esquema, etc.
Ejemplo:
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];