2017-08-04 7 views
1

私はテーブルの値を持つ関数をいくつかのパラメータをnullableにし、他はテーブルとカラムの名前をいくつか定義します。これは残念なことに動的SQLの必要性を意味します。問い合わせは、私はSSMSでで使用された場合完全に走ったが、動的SQLを使用してテーブルに値を返す関数の戻り値

に関数の結果にそれを回すしようとしているメッセージ443、レベル16、状態14、プロシージャのイベント、ライン67 [バッチスタートライン0] 関数内で副作用演算子 'INSERT EXEC'の使用が無効です。

機能は、イベントのデータソースを構成するイベントの名前を取り、イベントテーブルのキー列、"e.'[email protected]+'ID"'e.'[email protected]+'Number'

関数が生成されたレポートを持っているだろうことを意図しています他のプロシージャ内で他のレポートを生成するために結合することができます。

私は見てきましたが、ほとんどの例と同様の質問は、通常、データベース内のテーブルを変更したり、テーブル変数ではなく、そうでなければreturnテーブル変数に挿入したくない場合には、まったく当てはまりません。一時テーブルを使用するか、動的SQLの内部に挿入することで、制限を回避する方法はありますか?

IF (@childEvent IS NOT NULL) BEGIN 
    SET @SQL = ' SELECT e.ProductID, e.ProductName, e.'[email protected]+'Number, e.Quantity - ISNULL(c.Quantity,0) AS Quantity ' 
     +' FROM {schema}.'[email protected]+'Table e ' 
     +' LEFT OUTER JOIN {schema}.'[email protected]+'Table c ' 
     +' ON c.'[email protected]+'ID = e.'[email protected]+'ID ' 
END 
INSERT INTO @Events 
EXECUTE sp_executesql @SQL, N'@asOfDate Date',@asOfDate 
+2

ストアドプロシージャまたはCLRテーブル値関数を使用します。動的SQLをテーブル値関数で実行することはできません。 –

答えて

0

テーブル値関数では動的SQLを使用できません。

関連する問題