2012-04-06 5 views
4

実際にSQL文を実行せずにSQLクエリが返すカラムを取得する方法はありますか?SQL文から返されたカラムを取得

set showplan_all onを使用して見て、OutputListフィールドを使用しましたが、結果は私が望んでいなかったものでした。正しい順序で列を取得する必要があります(列挙されているかどうかに関係なく)。

私はSQL Server 2008 R2を使用しています。

--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 

私は列が返さ取得しようとしたときに最初のテーブルには何も挿入したいとは思わないでしょう。

明確にするためには、ここで実行できるクエリの例です。

注:これは単なる例に過ぎません。複数のcrud操作を行う何百行ものSQL文があります。私は手動でコード行を解析しようとする可能性があることを知っていますが、私の質問は、どのカラムが最終的なselect文で返されるかを決定するSQLサーバパーサを使用するメソッドに向けられていました。

+0

この質問は、万が一SqlBulkCopyを使用することに関連していますか? – Phil

+0

いいえ、SQL文を実行しなくても列を取得できるという利点があるレポートアプリケーションがあります。 – ChandlerPelhams

答えて

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自身が一度FMTONLYがオンになったときに、自動的に(成功メッセージとともに)失敗することを忘れていました。


私はちょうどこの機能は廃止しているように見えることに気づいた、との交換だけで最初の結果セットに関する情報を取得することができます。どのような使用は、複雑なクエリに直面している?

+0

私はまだ2008 R2を使用していますが、これは償却されていないバージョンなので、これは私にとって素晴らしいことです(将来的には少なくともatleast)。これはまさに私が探していたものです。ありがとう! – ChandlerPelhams

1

私はこれが可能であるとは思わないが、あなたは確かに何も結果なし結果セットの形状を得るために

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

ような何かを行うことができます。

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

+0

もちろん、本当に簡単な解決策は、クエリが出した列を指定することです。 – lyrisey

+0

SQLコードが事前に認識されないため、これは機能しません。最終的な選択の前にデータを挿入/更新することができるいくつかのステートメントを含むことがあります。 – ChandlerPelhams

+0

最後の選択を除外できませんか? – Phil

関連する問題