【问题标题】:SQL Server : return multiple values from function [duplicate]SQL Server:从函数返回多个值[重复]
【发布时间】:2015-07-07 22:28:52
【问题描述】:

有没有办法从一个函数返回多个值?理想情况下希望按照这些思路做一些事情(我知道语法是错误的!)

SELECT 
    1 as test1, 2 as test2, 3 as test3, 
    fn_result(test1, test2, test3)[0] as result1, 
    fn_result(test1, test2, test3)[1] as result2, 
    fn_result(test1, test2, test3)[2] as result3

FUNCTION fn_result(val1, val2, val3) 
   RETURN (val1 + val2, val2 + val3, val1 + val3)

我完全没有使用 SQL 函数的经验,所以不确定这样的事情是否可以做到。

谢谢

【问题讨论】:

  • 你想要一个table-valued function
  • 您可以返回表值函数或 XML 文档,但您使用的是标量值函数语法。

标签: sql-server


【解决方案1】:

inline table valued functioncross apply 一起使用:

Create function fn_result(@val1 int, @val2 int, @val3 int)
returns table
as
Return (select @val1+@val2 as val12,
@val1+@val3 as val13, @val2+@val3 as val23)
go

select * from (select 1 as test1, 2 as test2, 3 as test3) t
cross apply dbo.fn_result(t.test1, t.test2, t.test3)

输出:

test1   test2   test3   val12   val13   val23
1       2       3       3       4       5

小提琴http://sqlfiddle.com/#!6/857c1/3

【讨论】:

  • (select * from dbo.fn_result(t.test1, t.test2, t.test3)) 是多余的。我只会使用 dbo.fn_result(t.test1, t.test2, t.test3)
  • 如何冗余?它返回集合。试试小提琴
  • 这是多余的,因为你可以像这样编写相同的查询: select * from (select 1 as test1, 2 as test2, 3 as test3) t cross apply dbo.fn_result(t.test1, t .test2, t.test3) ca Imo 它更干净,嵌套层次少,不提供任何东西。
  • @Blim,我现在明白了,谢谢
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 2011-04-19
  • 2021-03-07
  • 2014-06-20
  • 1970-01-01
相关资源
最近更新 更多