我有一个允许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 * 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应用程序的解析引擎中,但它只支持基本的SELECT函数,因为脚本被撕开然后重新组合在一起以防止SQL注入攻击所以我们在我们的内容中非常有限能够做到的。上面的第一个和第二个脚本工作得很好,我只是想看看是否有办法让第三个脚本工作来优化脚本。
感谢任何帮助。
答案 0 :(得分:3)
您可以使用APPLY
:
SELECT r.* --TODO - Pick columns
FROM
MyTable t
CROSS APPLY dbo.MyFunction(t.Column1,t.Column2) as r
WHERE
t.Rec = 1