SQL 中的游标替代
Cursor Alternative in SQL
我是一名小学生。级别的开发人员,正在 SQL 中编写脚本以尝试迭代 select 语句的结果集,对于返回的每一行,取一些列并将它们传递到存储过程中.我从我在 Whosebug 上找到的其他示例中整理了这个脚本,已经 运行 33 分钟了。我做了一些研究,现在发现游标只能作为最后的手段使用。 :(
有人可以帮助我将其重构为更友好的性能吗?我正在处理的结果集中有 419 行。
declare @docid uniqueidentifier
declare @publish_xml nvarchar(max) = null
declare @pub_text1 nvarchar(max) = null
declare @pub_text2 nvarchar(max) = 'Physical Mail'
declare @pub_text3 nvarchar(max) = null
declare cur CURSOR LOCAL for
select d.document_id, d.published_xml, d.published_text1, d.published_text2, d.published_text3
from tblCMS_Document d
where d.template_id = '357760AD-1D33-4162-A813-20F56901C18D'
open cur
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
while @@FETCH_STATUS = 0 BEGIN
exec [usp_CMS_Document_Publish] @docid, @publish_xml, @pub_text1, 'Physical Mail', @pub_text3
END
CLOSE cur
DEALLOCATE cur
这并没有回答您的问题,但这可能就是您的光标永远 运行 的原因。您在 while 循环中缺少 FETCH NEXT:
open cur
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
while @@FETCH_STATUS = 0 BEGIN
exec [usp_CMS_Document_Publish] @docid, @publish_xml, @pub_text1, 'Physical Mail', @pub_text3
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
END
我会将游标查询移至 usp_CMS_Document_Publish 并在基于集合的方法上执行此发布操作。是不是不能编辑usp_CMS_Document_Publish?
我是一名小学生。级别的开发人员,正在 SQL 中编写脚本以尝试迭代 select 语句的结果集,对于返回的每一行,取一些列并将它们传递到存储过程中.我从我在 Whosebug 上找到的其他示例中整理了这个脚本,已经 运行 33 分钟了。我做了一些研究,现在发现游标只能作为最后的手段使用。 :(
有人可以帮助我将其重构为更友好的性能吗?我正在处理的结果集中有 419 行。
declare @docid uniqueidentifier
declare @publish_xml nvarchar(max) = null
declare @pub_text1 nvarchar(max) = null
declare @pub_text2 nvarchar(max) = 'Physical Mail'
declare @pub_text3 nvarchar(max) = null
declare cur CURSOR LOCAL for
select d.document_id, d.published_xml, d.published_text1, d.published_text2, d.published_text3
from tblCMS_Document d
where d.template_id = '357760AD-1D33-4162-A813-20F56901C18D'
open cur
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
while @@FETCH_STATUS = 0 BEGIN
exec [usp_CMS_Document_Publish] @docid, @publish_xml, @pub_text1, 'Physical Mail', @pub_text3
END
CLOSE cur
DEALLOCATE cur
这并没有回答您的问题,但这可能就是您的光标永远 运行 的原因。您在 while 循环中缺少 FETCH NEXT:
open cur
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
while @@FETCH_STATUS = 0 BEGIN
exec [usp_CMS_Document_Publish] @docid, @publish_xml, @pub_text1, 'Physical Mail', @pub_text3
fetch next from cur into @docid, @publish_xml, @pub_text1, @pub_text2, @pub_text3
END
我会将游标查询移至 usp_CMS_Document_Publish 并在基于集合的方法上执行此发布操作。是不是不能编辑usp_CMS_Document_Publish?