動的なT-SQL
ステートメントを作成するために、ストアドプロシージャで次のシステムオブジェクトを使用しています。
[sys].[objects]
[sys].[parameters]
[sys].[dm_exec_describe_first_result_set]
[sys].[columns]
実稼働コードでシステムオブジェクトを使用したことがないので、発生する可能性のある欠点や問題(パフォーマンスなど)があるのか、通常のユーザー定義オブジェクトとして使用するのはOK
であるのか疑問に思います。
システムオブジェクトを使用してT-SQLを構築することに関連する実際のパフォーマンスの問題はないはずです。
また、動的T-SQLの構築は、生成したT-SQLステートメントを実際に実行するよりもサーバーへの負荷がはるかに軽いことも考慮してください。
INFORMATION_SCHEMAビューもありますが、これらはシステムオブジェクトを部分的にしかカバーしていません。これについては、一度推奨されたものの、多くの制限があり、もう使用しないことを警告するためにのみ言及します。
コードの最大の問題は、システムオブジェクトが時間の経過とともに変化することです。おそらくほとんどの変更はコード生成に影響を与えませんが、SQLServerの新しいバージョンにアップグレードする前に事前に計画する必要があります。
SQL Serverのドキュメントには、通常、次のアップグレードの変更点が詳しく説明されています。
たとえば、SQL Server 2014の重大な変更へのリンクは次のとおりです。 https://msdn.Microsoft.com/en-us/library/ms143179.aspx#SQL14