1

私は2つのパラメータを許可する関数を持っています:

SELECT * FROM dbo.MyFunction( 'Value1', 'Value2' )

SQL ステートメントを使用してパラメーターを渡す必要があります。

SELECT * FROM dbo.MyFunction
( 
    ( SELECT Column1 FROM MyTable WHERE Rec = 1 ), 
    ( SELECT Column2 FROM MyTable WHERE Rec = 1 ) 
)

2 つの Select ステートメントが同じテーブルを参照しているため、単一の select ステートメントを介して値を渡すことができるかどうか疑問に思っていました。

SELECT * FROM dbo.MyFunction( ( SELECT Column1, Column2 FROM MyTable WHERE Rec = 1 ) )

そのようなことさえ可能ですか?上記のように単一のステートメントのままにしておく必要があります。残念ながら、変数を使用することはできません。それ以外の場合は、簡単に実行できます。

DECLARE @Var1 nvarchar(20)
DECLARE @Var2 nvarchar(20)
SELECT @Var1 = Column1, @Var2 = Column2 FROM MyTable WHERE Rec = 1
SELECT * FROM dbo.MyFunction( @Var1, @Var2 )

スクリプトは Web アプリケーションの解析エンジンに入力されますが、SQL インジェクション攻撃を防ぐためにスクリプトがバラバラにされてから元に戻されるため、基本的な SELECT 関数しかサポートしていないため、実行できることは非常に限られています。 . 上記の 1 番目と 2 番目のスクリプトは完全に機能します。3 番目のスクリプトを機能させる方法があるかどうかを確認したかっただけで、スクリプトを最適化します。

任意の支援に感謝します。

4

1 に答える 1