2016-06-22 12 views
2

from句内のselectクエリを動的SQLにすることはできますか?例Select QueryでFrom句で動的SQLを実行できますか?

DECLARE @sql NVARCHAR(MAX) 
SET @sql='SELECT * table' 

SELECT t.*, a+b AS total_sum 
FROM 
(
    EXEC (@sql) 
) t 

については 上記は、どのように我々はこの機能を実現することができ、できない場合は? もちろん、上記のクエリの結果はSQL Serverで実行されるとエラーになります。

ありがとうございました。あなたの上記の例では :

+0

動的SQLを使用してテーブルに挿入し、後でそれをそこから読み取るか、またはすべてを動的にしないのはなぜですか? – Hybridzz

+0

@Hybridzzテーブル内のデータが100万以上のレコードのように大きすぎる場合は、一時テーブルを使用することをお勧めしますか? – user1652746

+0

[SQLを使用してストアドプロシージャの結果をフィルタリングする](http://stackoverflow.com/a/28295383/4519059))の回答を確認してください。 –

答えて

3

句からで動的テーブルを使用するためには、あなたが外でコマンドEXEC(@sql)を実行する必要があります

DECLARE @sql NVARCHAR(MAX) 

DECLARE @dynamicSql NVARCHAR(MAX) 

SET @sql='SELECT * table' 

SET @dynamicSql ='SELECT t.*, a+b AS total_sum 
FROM 
(
    '[email protected]+' 
) t' 

EXECUTE sp_executesql @dynamicSql 
+0

だから、基本的にすべてを(外側の選択部分も)1つの動的SQLに入れて実行します。これは間違いなく私の問題を解決します。 – user1652746

1

をSQL Serverでは、SQLステートメントは、データベースがそれを見て初めてコンパイルされています。つまり、生成されるコードを変更できるものはパラメータにすることはできません。今度はあなたが...

  • テーブル名
  • ためのパラメータを使用できないことを意味している
  • 列名
  • 条項
  • によって順

表現に参加実際には、あなたは多かれ少なかれ、パラメータを使用することに限定されていると言うことができる...

比較 MyColumn = @Param1
  • リテラルSELECT文SELECT @Param2挿入/更新文で
  • リテラル値SET Column = @Param3
  • トップ、限界の値、及びフェッチ節SELECT TOP @Param4
  • 他の箇所で述べたようにの

    • リテラル値、回避策は、SQLを文字列として作成し、その文字列をsp_executesqlに渡すことです。


      ディープノート:

      SQLが正常に中間言語にコンパイルされます。この中間言語はXMLとして見ることができます。詳細は、「実行計画」を参照してください。

      SQL Server 2014では、ストアドプロシージャをC++コードに変換して機械語にコンパイルできます。これを行う際には、ここでディスカッションするのが非常に難しい多くの制限があります。

    関連する問題