Tracker
データベース ( ) とテーブル ( Work
)に基づいて列のメタデータを検索するクエリを作成しました。
SELECT Cols.Name,
TYPE_NAME(Cols.user_type_id) Type,
CAST(ISNULL(OBJECTPROPERTY(OBJECT_ID(Keys.CONSTRAINT_NAME), 'IsPrimaryKey'), 0) AS BIT) PrimaryKey,
Cols.is_identity [Identity],
Cols.is_nullable Nullable,
CAST(ColumnProperty(object_id, Cols.name, 'IsComputed') AS BIT) Computed,
CASE WHEN Cons.CONSTRAINT_TYPE IS NULL THEN NULL ELSE Keys.CONSTRAINT_NAME END ForeignKey
FROM sys.columns Cols
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE Keys
ON Keys.COLUMN_NAME = Cols.name
AND Keys.TABLE_CATALOG = 'Tracker'
AND Keys.TABLE_NAME = 'Work'
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS Cons
ON Cons.CONSTRAINT_NAME = Keys.CONSTRAINT_NAME
AND Cons.CONSTRAINT_TYPE = 'FOREIGN KEY'
WHERE Cols.object_id = OBJECT_ID('Work')
ORDER BY Cols.column_id ASC
これにより、次の結果が生成されます。
外部キーの関係情報を検索するために、次のクエリも作成しました。
SELECT OBJECT_NAME(FKCols.referenced_object_id) ForeignTable,
Cols.name ForeignColumn
FROM sys.foreign_key_columns FKCols
LEFT JOIN sys.foreign_keys FKs
ON FKCols.constraint_object_id = FKs.object_id
LEFT JOIN sys.columns Cols
ON Cols.object_id = FKs.referenced_object_id
WHERE Cols.column_id = FKCols.referenced_column_id
AND FKs.name = 'FK_Work_Tasks'
これが生成されます:
ここまで来るのに数時間かかりましたが、本当に困っています。私はこのような結果を得ようとしています:
これらのクエリをマージするにはどうすればよいですか?
これをDBAに投稿するつもりでしたが、これが基本的な SQL クエリまたは高度な SQL クエリ (オフトピック/オントピック) の権限に該当するかどうかはわかりませんでした。
また、ここで使用できる最適化を誰かが指摘できれば、それも大歓迎です!