可以呀: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 行)
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 行)
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
导致后面的charindex(''']',@id)得不到正确的值解决办法1是定义@id与@xpath的长度一样
或者像上面的,定义多一个变量来协助处理就行了.