有點不明白
xpath="\invoice\ship\name"
invoice與ship都是表,為什麼要偉兩個表名進來呢?
我認為應該是隻偉一個表名及要更新的字段

解决方案 »

  1.   

    但是这个xpath是根据xml的结构来的呀,就是说调用这个procedure的用户是不知道数据库内表的构造的,他只根据xml的结构来更新,
      

  2.   

    说清楚,只根据xml的结构来更新参数是一个char(50):xpath ,一个是char(40):value
    根据这个xpath比如:"\invoice\ship\name"来update 数据库更新为什么? 更新为value传递的值?
      

  3.   

    按你的参数传递方法,无法更新table :invoice
    Id char(40) key
      

  4.   

    --简单地,可以这样写:create proc p_update
    @xpath char(50),
    @value char(50)
    as
    declare @s Nvarchar(4000)
    select @s=case len(@xpath)-len(replace(@xpath,'\',''))
    when 3 then 'ship'
    when 4 then 'address'
    else '' end
    if @s=''
    begin
    set @s=rtrim(@xpath)
    raiserror('无效的path"%s"',1,16,@s)
    return
    end
    set @s='update '+@s+' set '
    +rtrim(right(@xpath,charindex('\',reverse(@xpath))-1))
    +'=@value'
    --print @s
    exec sp_executesql @s,N'@value char(50)',@value
    go--调用
    exec p_update '\invoice\ship\name','aa'
      

  5.   

    上面的可以了,但是有个问题,我的ship表中有个invoiceId char(40) foreign key
    对应invoice表中的id
    我的xpath希望是这样的格式:\invoice[@Id='12']\ship\name'
    应该怎么改呀?谢谢
      

  6.   

    就是更新表ship中的内容,但是只更新invoiceId='12'的记录
      

  7.   

    比如我的xpath:\invoice[@Id='13']\ship\name' value="new"就更新ship中 invoiceId='13'的项,把name 字段更新为"new"
      

  8.   

    我知道怎么做了,但是大哥你教我怎么从xpath='\invoice[@Id='13']\ship\name' 中把Id的值'13'提出到一个变量id中吧
      

  9.   

    declare @xpath varchar(50),@value varchar(50)
    set @xpath='\invoice[@Id=''13'']\ship\name' if patindex('%[[@]%['']%['']]%',@xpath)>0
    select @value=stuff(@xpath,1,patindex('%[[@]%['']%['']]%',@xpath),'')
    ,@value=stuff(@value,1,charindex('''',@value),'')
    ,@value=left(@value,charindex(''']',@value)-1)
    select @value