4

SQLステートメントを実際に実行せずにSQLクエリが返す列を取得する方法はありますか?

OutputListフィールドの使用set showplan_all onと使用を検討しましたが、結果は私が望んでいたものではありませんでした。正しい順序と正しい列名(エイリアスされているかどうか)で列を取得する必要があります。

SQL Server2008R2を使用しています。

明確にするために、実行できるクエリの例を次に示します。

--log that the user has executed a query
insert into execution_log_table
(timestamp
,user_id
,report_id)
values (CURRENT_TIMESTAMP
,1234
,5678)

select *
from (select column1
,column2
from another_table) tbl

列を返そうとするときに、最初のテーブルに何も挿入したくありません。

*注:これは単純な例にすぎません。複数のクラッド操作を実行する数百行のコードであるSQLステートメントがいくつかあります。コードの行を手動で解析できることはわかっていますが、質問はSQLサーバーパーサーを使用して最終的なselectステートメントで返される列を決定するメソッドに向けられました。

4

2 に答える 2

1

SET FMTONLY ON。空の結果セットを「返します」が、実際のテーブルには影響しません。

set fmtonly on
go
insert into execution_log_table
([timestamp]
,user_id
,report_id)
values (CURRENT_TIMESTAMP
,1234
,5678)

select *
from (select column1
,column2
from another_table) tbl

ちなみに、他のアクティビティ(独自のバッチで使用)に同じ接続を使用する前に、オフにすることを忘れないでください。そうしないと、しばらく混乱する可能性があります。SET FMTONLY OFF(ステートメントのバッチをテストするためにテーブルを作成しようとしたときに行ったように、CREATE TABLE一度オンにすると、s自体が(成功メッセージとともに)サイレントに失敗することを忘れていFMTONLYました)。


この機能は廃止されたようであり、置き換えでは最初の結果セットに関する情報しか取得できないことに気づきました。複雑なクエリに直面した場合、それはどのような用途ですか?

于 2012-04-09T15:14:45.663 に答える
1

私はこれが可能だとは思いませんが、あなたは確かに次のようなことをすることができます

  select <column list>
    ... blah blah
  where 1=0

結果なしで結果セットの形状を取得するため。

クエリを実行する必要がありますが、実行時間は最小限に抑えられます。

于 2012-04-06T19:51:59.027 に答える