我需要将 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=1
的城市和FUNCTION
的结果,当参数是选择所有城市时。 我需要在不将选择分配给变量的情况下执行此操作,因为我在 CTE 中使用此语句,其中无法分配变量(如果可以,请告诉我 :) 但它在我的系统中不起作用例)
最佳答案
根据所有证据,这是不可能的。
this Technet article 中的示例仅显示了在 Transact-SQL 批处理中使用表值参数的一种方法,这可能已经暗示没有其他方法。如您所见,它表明您需要声明和填充与例程中的参数具有相同用户定义类型的表值变量,然后将该变量作为参数传递。
如果这还不够,我相信文章中的以下段落可以解释为什么需要使用变量:
Transact-SQL passes table-valued parameters to routines by reference to avoid making a copy of the input data.
因此,在幕后,您的函数不会完全接受一个集合,而只是一个引用。您需要在脚本中创建该引用,这就是声明表值变量的目的。
然后是this (closed) Connect item .
如果您想要/需要避免变量声明,您可能需要重新审视您的设计。如果您需要这方面的帮助,请发布一个问题,详细说明您的查询在做什么,以便找到合适的替代方案。
关于sql - 选择结果作为用户定义的表参数函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108538/