sql - 选择结果作为用户定义的表参数函数中的参数

标签 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

函数的目的是SELECTID=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/

相关文章:

mysql - 使用子选择来统计一个表中的结果

php - 错误 #1064 mysql 更新 wordpress wp_posts - post_content phpmyadmin

javascript - 在循环中调用图像会产生重叠变量

c++ - 指定内联回调函数作为参数

sql - 排除具有特定值 '*' SQL SELECT 的记录

php - 订阅、单次购买产品和可变服务的数据模型

sql - 如果不同的列为 true,则替换列的值

sql - 为什么对 @@rowcount 的两次调用会返回两个不同的值?

SQL测量存储过程执行时间

bash - 可以在 bash 子 shell 中调用一个函数作为后台作业吗?