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 应用程序的解析引擎中,但它仅支持基本的 SELECT 功能,因为脚本被撕开然后重新组合在一起以防止 SQL 注入攻击,因此我们能够做的事情非常有限. 上面的第一个和第二个脚本完美地工作,我只是想看看是否有办法让第三个脚本工作优化脚本。

感谢任何帮助。

4

1 回答 1

3

您可以使用APPLY

SELECT r.* --TODO - Pick columns
FROM
   MyTable t
     CROSS APPLY dbo.MyFunction(t.Column1,t.Column2) as r
WHERE
   t.Rec = 1
于 2013-07-09T07:16:58.137 回答