web-dev-qa-db-ja.com

生産関数でのシステムビューと関数の参照

動的なT-SQLステートメントを作成するために、ストアドプロシージャで次のシステムオブジェクトを使用しています。

  • [sys].[objects]
  • [sys].[parameters]
  • [sys].[dm_exec_describe_first_result_set]
  • [sys].[columns]

実稼働コードでシステムオブジェクトを使用したことがないので、発生する可能性のある欠点や問題(パフォーマンスなど)があるのか​​、通常のユーザー定義オブジェクトとして使用するのはOKであるのか疑問に思います。

1
gotqn

システムオブジェクトを使用してT-SQLを構築することに関連する実際のパフォーマンスの問題はないはずです。

また、動的T-SQLの構築は、生成したT-SQLステートメントを実際に実行するよりもサーバーへの負荷がはるかに軽いことも考慮してください。

INFORMATION_SCHEMAビューもありますが、これらはシステムオブジェクトを部分的にしかカバーしていません。これについては、一度推奨されたものの、多くの制限があり、もう使用しないことを警告するためにのみ言及します。

コードの最大の問題は、システムオブジェクトが時間の経過とともに変化することです。おそらくほとんどの変更はコード生成に影響を与えませんが、SQLServerの新しいバージョンにアップグレードする前に事前に計画する必要があります。

SQL Serverのドキュメントには、通常、次のアップグレードの変更点が詳しく説明されています。

たとえば、SQL Server 2014の重大な変更へのリンクは次のとおりです。 https://msdn.Microsoft.com/en-us/library/ms143179.aspx#SQL14

3
RLF