StackOverflow と Google をしばらく検索しましたが、あまり似たものは見つかりませんでした。ここに私の問題があります。
現在、「Sequence」という名前のデータベース内のすべての列に、値が >=1 であることを保証する制約が関連付けられていることを確認するストアド プロシージャを作成しています。ただし、現在のメソッドは、テーブルだけでなく、「Sequence」を含むすべてのオブジェクトを返します (つまり、「Sequence」を含むストアド プロシージャの取得/設定/削除)。
ここに私の現在のコードがありますが、これはうまくいきますが、私は汚い解決策だと感じています:
SELECT DISTINCT
'The Sequence column of the ' + CAST(OBJECT_NAME([AC].[object_id]) AS NVARCHAR(255)) + ' table is missing a Sequence>=1 constraint.' AS MESSAGE
FROM [sys].[all_columns] AC
LEFT JOIN [sys].[check_constraints] CC
ON [CC].[parent_object_id] = [AC].[object_id]
AND [CC].[name] LIKE '%Sequence'
AND [CC].[definition] LIKE '%Sequence]>=(1))'
WHERE [AC].[name] = 'Sequence'
AND [CC].[name] IS NULL
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Get%'
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Set%'
AND OBJECT_NAME([AC].[object_id]) NOT LIKE '%Delete%'
具体的には、私の質問は次のとおりです。[sys].[all_columns].[object_id] を指定すると、指定されたオブジェクトがテーブルとストアド プロシージャのどちらであるかを確認する簡単な方法はありますか?
これに関するヘルプやアドバイスをいただければ幸いです。また、ここで一般的なコードのクリーンアップを行います。私は tSQL に比較的慣れていないため、これはおそらく最も効率的な方法ではありません。
ありがとう、アンドリュー