我是SQL的新手,被问到是否可以改进一些事情。我能够清理一些东西,但这个让我陷入困境。这些运行超级慢,但我不知道如何解决它。也许嵌套选择?
从几个源中提取数据并将其推送到临时表中,然后将其用于报告...但是游标是如何执行大量更新来清理数据的。他们找到具有空值的记录,然后查找具有填充的cs_no的类似记录以更新空值。
非常感谢任何帮助,谢谢
Declare CSUPDATE Cursor For
Select Distinct cs_no
From #TEMP_EH
ORDER BY CS_NO
Open CSUPDATE
Fetch Next From CSUPDATE into @CS
While @@FETCH_STATUS = 0
BEGIN
Declare CS Cursor for
SELECT seqno
FROM #TEMP_EH
WHERE comment like '%'+@CS+'%' and
(cs_no is Null or cs_no = 'No Match Found')
and comment is not null
open cs
fetch next from cs into @seq
while @@FETCH_STATUS = 0
begin
UPDATE #TEMP_EH
Set CS_NO = @CS
where seqno = @seq
fetch next from cs into @seq
end
close cs
deallocate cs
Fetch Next From CSUPDATE into @CS
END
Close CSUPDATE
Deallocate CSUPDATE
编辑: 感谢您的建议,下次我的问题一定会更详细。
我的会议开始创建测试表后,通过反复试验找到了解决方案。
create table #derp(cs_no varchar(20), comment varchar(20))
insert into #derp values (NULL, 'stuff')
insert into #derp values (NULL, 'bacon2')
insert into #derp values ('stuff', 'bacon3')
select * from #derp
UPDATE a
SET a.cs_no = b.cs_no
FROM #derp A
INNER JOIN #derp B on a.comment LIKE '%'+b.cs_no+'%'
WHERE (a.cs_no is Null
OR a.cs_no = 'No Match Found')
AND a.comment is not null
select * from #derp
--drop table #derp
答案 0 :(得分:0)
目标是通过搜索评论中包含cs_no的其他记录来更新cs_no字段。它的粗略,但它的报告链接数据不完整/损坏和链接字段的项目给用户一个很好的猜测跟踪我们的神秘项目是。我的部分问题是不知道意图,但在这里你去......
在示例表中,第一条记录包含(NULL,'stuff')。然后将评论('stuff')链接到第三条记录,其中cs_no为'stuff'。然后,更新将第一条记录填充到('stuff','stuff')
create table #derp(cs_no varchar(50), comment varchar(50))
insert into #derp values (NULL, 'stuff')
insert into #derp values (NULL, 'bacon2')
insert into #derp values ('stuff', 'bacon3')
select * from #derp
UPDATE a
SET a.cs_no = b.cs_no
FROM #derp A
INNER JOIN #derp B on a.comment LIKE '%'+b.cs_no+'%'
WHERE (a.cs_no is Null
OR a.cs_no = 'No Match Found')
AND a.comment is not null
AND a.comment <> ''
select * from #derp
--drop table #derp
答案 1 :(得分:-1)
不要使用游标!如果您可以将其重新编写为设置操作,那么速度会快得多。使用游标会导致任何大型数据集的性能下降。