单选语句作为多个参数

时间:2013-07-09 07:14:08

标签: sql-server tsql select

我有一个允许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注入攻击所以我们在我们的内容中非常有限能够做到的。上面的第一个和第二个脚本工作得很好,我只是想看看是否有办法让第三个脚本工作来优化脚本。

感谢任何帮助。

1 个答案:

答案 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