gpt4 book ai didi

sql-server - 在 SQL Server 上迭代游标时如何知道最后一行?

转载 作者:行者123 更新时间:2023-12-01 11:24:11 24 4
gpt4 key购买 nike

在 SQL Server 上迭代游标时如何知道最后一行?

我曾尝试使用 counter 和 @@CURSOR_ROWS@@FETCH_STATUS ,但效果不佳,或者我没有以正确的方式使用它们。

编辑:

嗯,是的,在每个循环的末尾用逗号组合字符串... ,。当然,在返回之前,我可以切断最后一个字符,即 , 但我想知道这是唯一的方法吗?

但是,有很多情况,知道如何识别最后一行可能会很好。

最佳答案

正如评论中所建议的,通过对第一行而不是最后一行做一些特殊的事情,在元素之间放置逗号更容易实现。1,2

而不是

WHILE @@FETCH_STATUS=0
BEGIN
SET @value = @value + @newelement + ','

...
END

并试图弄清楚如何特别对待最后一行,这样做要容易得多:
SET @first = 1
WHILE @@FETCH_STATUS=0
BEGIN
IF @first = 1
SET @first = 0
ELSE
SET @value = @value + ','

SET @value = @value + @newelement

...
END

另一种转换,如果你真的需要为最后一行做一些事情是使用中间变量和非标准游标循环:
declare boris cursor for select top 10 name from sys.objects order by name

declare @name sysname
declare @nametemp sysname

open boris
fetch next from boris into @nametemp
while @@FETCH_STATUS=0
BEGIN
set @name = @nametemp --Use SELECT if multiple variables to be assigned

fetch next from boris into @nametemp

if @@FETCH_STATUS!=0
begin
print 'and finally'
end

print @name
END

close boris
deallocate boris

打印(对我来说,在一个几乎空的数据库中):
EventNotificationErrorsQueue
filestream_tombstone_2073058421
filetable_updates_2105058535
IsIt
QueryNotificationErrorsQueue
queue_messages_1977058079
queue_messages_2009058193
queue_messages_2041058307
ServiceBrokerQueue
and finally
sysallocunits

但我强烈推荐第一种类型的转换。

1这也不仅仅是 T-SQL 的事情。在大多数编程语言中,如果您可以将问题从“以不同方式对待最后一次迭代”转换为“以不同方式对待第一次迭代”,通常会容易得多

2并且,当然,插入关于游标是 SQL 中最后手段的常见警告,使用基于集合的方法,除非或直到它们被证明是不合适的。

关于sql-server - 在 SQL Server 上迭代游标时如何知道最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39094766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com