通过表值函数的sql循环

zi8p0yeb  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(302)

我有一张table x 其中有列 y 以及 z 它有10行数据。
然后我有一个表值函数 getDetails(y,z) 它接受表中存储的值 x 在列中 y 以及 z 归还table tb 有三列。
我需要编写一个tsql查询来循环表中的值 x 通过函数 getDetails(y,z) 为每组值返回一行 y 以及 z 从表 x 在本例中为表 tb 应该有10行。
这是我到目前为止只返回一行,每次我运行它。

DECLARE @y NVARCHAR(50);
DECLARE @z NVARCHAR(2);

SELECT @y =y FROM x

SElECT @z =z FROM x

SELECT * from getDetails(@y,@z)

这是回报

col1      col2     col3
       ---------------------
row1   Lorem     Ipsum     Sit

//更新如果有人有一个想法,我可以使用临时表来实现这一点,请让我知道

wmvff8tz

wmvff8tz1#

您正在尝试为表x的每一行调用用户定义的函数。你不需要循环,你可以自己进行基于集合的操作。
下面我创建一个表用户定义函数,它返回一个有3列的表。

create FUNCTION dbo.testtableresult(@a int)
returns table as
return
select @a+1 as a1, @a+2 as a2, @a+3 as a3

我将两行加载到表变量中,然后为每行调用用户定义的函数。

DECLARE @table table(a int)

INSERT INTO @table values(1),(2)

SELECT t.a, t1.a1, t1.a2, t1.a3
FROM @table as t
CROSS APPLY dbo.testtableresult(t.a) as t1
+---+----+----+----+
| a | a1 | a2 | a3 |
+---+----+----+----+
| 1 |  2 |  3 |  4 |
| 2 |  3 |  4 |  5 |
+---+----+----+----+
h4cxqtbf

h4cxqtbf2#

如果你愿意一次得到所有的结果,我会用 CROSS APPLY 在这里。

SELECT
  d.col1,
  d.col2,
  d.col3
FROM x
CROSS APPLY dbo.getDetails (x.y, x.z) AS d;

这将一次返回完整的数据集。你也可以加上 x.y 以及 x.zSELECT 子句,如果您需要/希望在结果中包含这些值。

相关问题