我需要将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


当参数为所有城市的选择时,该功能适用​​于具有SELECTID=1城市和FUNCTION的结果。我需要在不将选择分配给变量的情况下执行此操作,因为我在无法分配变量的CTE中使用此语句(如果可以,请告诉我:),但在我的情况下不起作用)

最佳答案

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

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

如果这还不够,我相信本文的以下内容可以解释为什么需要使用变量:


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


因此,在幕后,您的功能将不会完全接受集合,而仅接受对其的引用。您将需要在脚本中创建该引用,这就是声明表值变量的目的。

然后是this (closed) Connect item

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

07-24 19:05
查看更多