【发布时间】:2018-07-12 07:45:09
【问题描述】:
- 我有一个要重用的函数 helper_function
- 将参数传递给另一个函数 f_union_helper_functions,其中传递了带有 ids 的字符串 id_string
- 拆分此字符串并遍历所有 id
- 调用函数并将结果添加到临时表中
- 从此表中返回选择
伪代码:
create function f_union_helper_functions
(
@id_string varchar,
...
return table as
return
(
...
foreach id in @id_string
begin
select * from helper_function(id) into #tmp
end
select #tmp
)
上面的代码远非完整/正确。我只想将迭代和联合的概念结合到一个临时表中并返回它。我怎样才能做到这一点?
【问题讨论】:
-
改用表值参数?
-
使用
cross apply。SELECT value FROM STRING_SPLIT(@id_string, ',') c cross apply helper_function(c.value)。您不需要STRING_SPLIT函数,因为您已经知道了。 -
您使用的是什么版本的 SQL Server?
-
另外,我只是想将迭代和联合的概念结合到一个临时表中并返回它。 -- 你实际上想在这里实现什么?这闻起来像是非常糟糕的数据库设计。
-
@Ajay Gupta 感谢这个很棒的答案;唯一的问题是我们使用 SQL2008,我不能为此使用 STRING_SPLIT
标签: sql sql-server union temp-tables sql-function