While 循环与 += (Addition Assignment) 只显示最后一个 resoult

While loop with += (Addition Assignment) shows just last resoult

提问人:Lukasz Bf 提问时间:12/19/2022 最后编辑:jarlhLukasz Bf 更新时间:12/22/2022 访问量:50

问:

我有一个用于存储临时数据的 sql 表

create table TempDataStore (ID int, HtmlCode NVARCHAR(max))

我用 while 循环填充此表

while @cnt < 3
BEGIN
set @html = CONVERT(nvarchar(MAX),dilos.report.CreateHTMLTable(
(
select  * from  dilos.report.getHESExpress(cast(@site as varchar))
order by status,SendungsNr offset 0+@cnt*4 rows fetch next 4 rows only FOR XML PATH('row'),ELEMENTS XSINIL),null,'',''))
insert into TempDataStore values(@cnt+1, @html)
set @cnt = @cnt +1
end

用于将sql转换为html表格,并将查询结果划分为4行。

现在我想创建一个名为 @htmlSummary 的 nvarchar(MAX) 变量,将 TempDataStore 中的每一行显示为一个 html 代码 (string/nvachar)。

while @cnt<3 --just some number
begin
set @htmlSummary = '<p><h3>Express Orders</h3>' +coalesce(replace((select HtmlCode from TempDataStore where id =@cnt+1),'<table border="1" style="font-size:40px;','<table class="table-sm table-striped"'),'') +'</p>' 
set @htmlSummary +=@htmlSummary 
set @cnt =@cnt+1
END

select @htmlSummary 

问题在于,@htmlSummary最后只存储 TempDataStore 表的最后一行。

SQL Server 循环 while 循环 变量赋值

评论

1赞 jarlh 12/19/2022
您使用的是哪种 dbms?(上面的代码是非常特定于产品的。
0赞 Lukasz Bf 12/22/2022
DBMS是MS SQL
0赞 Ruud Helderman 12/22/2022
set @htmlSummary +=@htmlSummary前面是 ,这显然覆盖了 。使用两个单独的变量,或者将两个语句合并为一个:set @htmlSummary = '...'@htmlSummaryset @htmlSummary += '...'
0赞 Lukasz Bf 12/22/2022
如果有一种方法可以动态声明变量,可以解决我的问题。我的意思是我有一个有 20 行的表,我想将其更改为 html,以便在一个 nvarchar 中将 5 行保存在 html 表中。为此,我需要变量 html1、html2、html3、html4。我找不到一种方法,也可以用sql在循环中声明变量。这就是我使用 TempDataStore 表的原因。我不明白为什么这个例子有效:DECLARE v1 VARCHAR(40);SET v1 = '这是原件。';SET v1 += '更多文本。';选择 v1;但是在我的循环中,只保存了最后一行。

答: 暂无答案