データベース内の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];