SELECT结果作为用户定义的表参数函数中的参数

时间:2014-04-16 11:47:40

标签: sql sql-server function common-table-expression create-table

我需要将SELECT结果作为用户定义的表参数函数(返回表)的参数传递:

CREATE FUNCTION
...

CREATE TABLE cities
(
    ID int identity not null primary key,
    name varchar(40) unique
)

SELECT ID as startID,FUNCTION( SELECT name FROM cities ) FROM cities WHERE ID=1

当参数选择所有城市时,功能适用于SELECT城市ID=1FUNCTION的结果。 我需要在没有为变量分配选项的情况下这样做,因为我在CTE中使用此语句,其中无法分配变量(如果他们可以请告诉我:)但它在我的工作中不起作用情况下)

2 个答案:

答案 0 :(得分:1)

根据所有证据,这是不可能的。

this Technet article中的示例仅显示了在Transact-SQL批处理中使用表值参数的一种方法,这可能意味着没有其他方法。如您所见,它表明您需要声明并填充与例程中的参数相同的用户定义类型的表值变量,然后将该变量作为参数传递。

如果这还不够,我相信文章中的以下段落可以解释为什么需要使用变量:

  

Transact-SQL将表值参数传递给引用例程,以避免复制输入数据。

因此,在幕后,您的函数不会完全接受 set ,而只接受引用。您需要在脚本中创建该引用,这就是声明表值变量的原因。

然后有this (closed) Connect item

如果您想要/需要避免变量声明,您可能需要重新访问您的设计。如果您需要帮助,请发布一个问题,详细说明您的查询正在做什么,以便找到合适的替代方案。

答案 1 :(得分:0)

试过申请?

SELECT c.ID, f.Name
FROM cities c
CROSS APPLY dbo.my_function(c.ID) f