私はテーブルの値を持つ関数をいくつかのパラメータを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
ストアドプロシージャまたはCLRテーブル値関数を使用します。動的SQLをテーブル値関数で実行することはできません。 –