在Sqlserver2005中写如下存储过程:
CREATE proc [dbo].[VA_Phone_TwoSearch]
(
@projectId int ,
@content varchar(512),
@result int output
)
as
begin set @result= -1 --默认没有查询到 
declare @startData varchar(256)--开始的匹配数据
declare @endData varchar(256) --结束的匹配数据

declare @ruleXml xml
select @ruleXml = xActiveRule
from VA_Project 
where xid=@projectId

if(@ruleXml is not null)
begin
set @startData= @ruleXml.value('Root[1]/Rows[1]/Row[1]/Field[1]','varchar(256)')
set @endData = @ruleXml.value('Root[1]/Rows[1]/Row[1]/Field[2]','varchar(256)')
end

if(len(@content)<len(@startData)) --查询内容小于设定的内容,左边补零
begin
    set @content=replicate('0',len(@startData)-len(@content))+ @content
end


if(len(@content)=len(@startData) and @content>=@startData and @content<=@endData) ---查询内容在两者之间
begin
set @result=0 --查询成功
end

end在执行到红色标记的地方会出现如下错误:
SELECT 失败,因为下列 SET 选项的设置不正确:'ARITHABORT'。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。我如果单独执行存储过程里面的代码,并没有问题,可以正常执行,请问高手是什么问题?

解决方案 »

  1.   

    补充一下,我读取出来的xml的格式如下:
    <Root>
      <MatchType type="0" />
      <MatchCols type="1" />
      <FirstRevert>首次查询,查询成功</FirstRevert>
      <MoreRevert>已经查询过了,不是第一次查询</MoreRevert>
      <OtherRevert>没有找到你需要的信息</OtherRevert>
      <Rows>
        <Row>
          <Field>1111111111</Field>
          <Field>9999999999</Field>
          <times />
        </Row>
      </Rows>
    </Root>
      

  2.   

    http://forums.microsoft.com/china/ShowPost.aspx?PostID=2592793&SiteID=15
      

  3.   

    set @startData= @ruleXml.value('/Root[1]/Rows[1]/Row[1]/Field[1]','varchar')测试一下
      

  4.   

    二楼的朋友推荐的里面的方法可行
    在存储过程开始处添加:set  ARITHABORT ON 
    就可以了看看有没有人这个是什么意思,等会结贴