TSQL sp中超出了MaxRecursion

时间:2014-06-24 10:43:43

标签: sql-server tsql recursion

我有这个代码在某种程度上有效,但是一旦表中有太多记录,它就会抛出"递归错误消息(超过100)"

我的代码计算列中唯一字数。我添加了"选项(maxrecursion 0)文本,但这没有任何区别。有人可以帮忙吗?

我正在使用sql server 2005(!)

我的sp是:

declare @table table(name varchar(50))
insert @table values('bla bla bla ltd')
insert @table values('bla plc ltd')
insert @table values('more text ')


declare @matchlist table(name varchar(50), replacement varchar(50))
insert @matchlist values('very good', 'good')
insert @matchlist values('good.', 'GOOD')
insert @matchlist values('nice.', 'NICE')
insert @matchlist values('-NICE', 'NICE')
insert @matchlist values('service.', 'SERVICE')
insert @matchlist values('GREAT.', 'GREAT')
insert @matchlist values('with.', 'WITH')
insert @matchlist values('WELL.', 'WELL')
insert @matchlist values('PROBLEMS.', 'PROBLEMS')

--query

select coalesce(m.replacement, a.substr) answer, count(*) count into #a
from [test_question] p

cross apply
(
  select substr from 
  dbo.f_split(p.answer, ' ')
) a 


left join
@matchlist m
on a.substr = m.name
where len(coalesce(m.replacement, a.substr))  >3
and coalesce(m.replacement, a.substr) not in ('they','with','have','been','were','house','from','isos','went','when','find','just','that','than','them','their','there')

group by coalesce(m.replacement, a.substr)

order by 2 desc

select * ,row_number()over (order by count desc) as ranking from #a
option (maxrecursion 0)
drop table #a

1 个答案:

答案 0 :(得分:1)

您已将option (maxrecursion 0)放在不递归的查询上。这就是为什么它没有效果。

您调用的函数可能是内部递归的。您必须将option (maxrecursion 0)放在那里。