可以呀:declare @id varchar(200)declare @xpath varchar(200)
set @xpath='invoice\ship[@Id=''1325'']\name'if patindex('%[[@]%['']%['']]%',@xpath)>0
select @id=stuff(@xpath,1,patindex('%[[@]%['']%['']]%',@xpath),'')
,@id=stuff(@id,1,charindex('''',@id),'')
,@id=left(@id,charindex(''']',@id)-1)
select @id结果:
-------------
1325(所影响的行数为 1 行)

解决方案 »

  1.   

    关键是着一句:set @xpath='invoice\ship[@Id=''1325'']\name'
      

  2.   

    --示例
    declare @xpath char(50)
    select @xpath='invoice\ship[@Id=''132234535'']\name'--处理
    declare @id varchar(10),@s varchar(50)  --@s定义要与@xpath的长度一样
    if patindex('%[[@]%['']%['']]%',@xpath)>0
    select @s=stuff(@xpath,1,patindex('%[[@]%['']%['']]%',@xpath),'')
    ,@s=stuff(@s,1,charindex('''',@s),'')
    ,@id=left(@s,charindex(''']',@s)-1)
    select @id
      

  3.   

    问题出在字符串被截断上,如果你的@id定义得过小的话,就会出现字符串被截断
    导致后面的charindex(''']',@id)得不到正确的值解决办法1是定义@id与@xpath的长度一样
    或者像上面的,定义多一个变量来协助处理就行了.