这个网站在过去帮助了我很多。决定尝试问我自己的问题:
我必须修剪和连接存储在单独记录中的字符串。一个表中的列最多只能包含 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