Loops 用于从每行中选择数据的光标位于无限循环中

Loops 用于从每行中选择数据的光标位于无限循环中,loops,cursor,Loops,Cursor,这个网站在过去对我帮助很大。决定试着问我自己的问题: 我必须修剪和连接存储在单独记录中的字符串。“一个表”中的列最多只能容纳255个字符。任何溢出文本都存储在单独的表中,其列最多只能容纳255个字符。因此,对于同一文本,该表可能有多条记录。只是我们不得不使用的坏软件 当我在评论中提到清除列中的垃圾时,我指的是他们在每个字符串末尾抛出的垃圾,表示另一条记录中有更多的文本 我的问题是,游标似乎处于无限循环中;返回的字符串连续重复整个文本 任何帮助都将不胜感激 ALTER FUNCTION [dbo]

这个网站在过去对我帮助很大。决定试着问我自己的问题:

我必须修剪和连接存储在单独记录中的字符串。“一个表”中的列最多只能容纳255个字符。任何溢出文本都存储在单独的表中,其列最多只能容纳255个字符。因此,对于同一文本,该表可能有多条记录。只是我们不得不使用的坏软件

当我在评论中提到清除列中的垃圾时,我指的是他们在每个字符串末尾抛出的垃圾,表示另一条记录中有更多的文本

我的问题是,游标似乎处于无限循环中;返回的字符串连续重复整个文本

任何帮助都将不胜感激

ALTER FUNCTION [dbo].[ReturnDesc] (@id int)
RETURNS varchar(7000)
AS

begin                  
/*getting rid of junk in event_text (if there is any) and 
      setting @entireDesc to event_text*/                   
declare @entireDesc varchar(7000)
declare @cnt int
declare @data varchar(5000)
select @cnt = COUNT(*) from events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id  

--data in oevent_text, need to strip
if @cnt > 0
select @entireDesc = left(t.event_text, len(t.event_text) - 4) from events e, event_text t where e.event_id = t.event_id and e.event_id = @id

--there is no data in oevent_text
else 
select @entireDesc = t.event_text from events e, event_text t where e.event_id = t.event_id and e.event_id = @id

/*getting rid of junk in oevent_text, concatenating it to @entireDesc, determine last record so that doesn't get stripped*/
declare @rows int
declare cur cursor local scroll for
select data from events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id order by o.segm

open cur
fetch next from cur into @data 

--returns the number of rows in the cursor 
set @rows = @@CURSOR_ROWS

while @@FETCH_STATUS = 0
begin 
    --if last record, don't strip characters
    if @rows = 1
        select @entireDesc = @entireDesc + o.data from events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id
    --4 characters need to be stripped at the end
    else
    select @entireDesc = @entireDesc + left(o.data, len(o.data) - 4) from R25.dbo.events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id

    set @rows = @rows - 1

    fetch next from cur into @data
end
close cur
deallocate cur

return @entireDesc

end 

尝试将begin和end添加到if语句中

--if last record, don't strip characters
    if @rows = 1
       BEGIN
        select @entireDesc = @entireDesc + o.data from events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id
    --4 characters need to be stripped at the end
       END
    else
       BEGIN
    select @entireDesc = @entireDesc + left(o.data, len(o.data) - 4) from R25.dbo.events e, oevent_text o where e.event_id = o.event_id and e.event_id = @id
       END