【问题标题】:multiple selects from a function into a temp table从函数中多次选择到临时表中
【发布时间】: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 applySELECT 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


【解决方案1】:

这是我解决它的方法:

ALTER FUNCTION [dbo].[f_union_helper_functions]
(
    @id_string NVARCHAR(1024)
)
RETURNS  TABLE 
AS 
RETURN
(
    SELECT * FROM [dbo].[fnSplit](@id_string, ',') c CROSS APPLY [dbo].[helper_function](c.item)
)

如果您的 SQLServer >= 2016,您可以使用 STRING_SPLIT 而不是 [fnSplit],我从这里得到 https://kishsharma.wordpress.com/2013/08/20/sql-server-user-defined-function-to-split-the-string-by-special-char/

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多