データベース内のNULL可能列は、パフォーマンスの問題を引き起こす場合があります。これは、null許容列が常にパフォーマンスの問題を引き起こすとは限りませんが、パフォーマンスの問題が発生した場合、null許容列を特定することで、問題がどこにあるかについての手がかりが得られる可能性があります。列をNOT NULLにすることがあります パフォーマンスの向上に役立ちます。
「NULL可能列」とは、NULLを許可する列を意味します。列の定義にNOT NULLが含まれていない場合 、次にNULL値を許可し、「null許容」です。
以下は、SQLServerのデータベース内のすべてのnull許容列を一覧表示できるようにするコードです。
例1-INFORMATION_SCHEMA.COLUMNS
この情報スキーマビューには、現在のデータベースの現在のユーザーがアクセスできるすべての列が一覧表示されます。 IS_NULLABLEという列があります 。関連する列でNULLが許可されている場合、この列は
YES
を返します。 。それ以外の場合、
NO
返されます。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
これにより、ビューのすべての列が一覧表示されます。
例2–指定された列が少ないINFORMATION_SCHEMA.COLUMNS
ビューからすべての列を返す必要がない場合があります。返される列が少ない例を次に示します。
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;
例3–sys.columnsの使用
INFORMATION_SCHEMA.COLUMNSを使用したくない場合 ビューを表示すると、sys.columnsにクエリを実行できます。 代わりに表示します。
ただし、テーブルやスキーマなどを返す場合は、いくつかの結合を行う必要があります。
例:
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];