--这个存储过程的目的是将XML填写入指定的表中
但是实际运行时总提示@hDoc未声明
经过调试,发现是第三步时exec出错,如果不动态拼写SQL,直接写insert 语句就没有问题请教各位,此处该如何写?CREATE           Procedure procInsertTable
@insertxml ntext ,
@tablename varchar(100)
AS
       declare @hDoc int         
       EXEC sp_xml_preparedocument @hDoc OUTPUT, @insertxml
       exec(N'  insert into '+ @tablename+' select  * '
                      +'  from openxml(@hDoc,''/DocumentElement/DataTable'',2)'
                      +'  with #aaa ')
GO

解决方案 »

  1.   

    --tryCREATE           Procedure procInsertTable
    @insertxml ntext ,
    @tablename varchar(100)
    AS
           declare @hDoc int         
    declare @sql nvarchar(2000)
           EXEC sp_xml_preparedocument @hDoc OUTPUT, @insertxml
    set @sql=N'  insert into '+ @tablename+' select  * '
                          +'  from openxml('+rtrim(@hDoc)+',''/DocumentElement/DataTable'',2)'
                          +'  with #aaa '
           exec(@sql)
    GO
      

  2.   

    CREATE           Procedure procInsertTable
    @insertxml ntext ,
    @tablename varchar(100)
    AS       exec(N'
           declare @hDoc int         
           EXEC sp_xml_preparedocument @hDoc OUTPUT, '+@insertxml+'
           insert into '+ @tablename+' select  * '
                          +'  from openxml(@hDoc,''/DocumentElement/DataTable'',2)'
                          +'  with #aaa ')
      

  3.   

    HI,roy_88,这样写后,报错: '<' 附近有语法错误nTEXT 内容为:
    <DocumentElement>
    <Table>
    <FCc>2008</FCc>
    <FMailID>00153AE4-2848-4F69-A9B2-D1451BE71C9F</FMailID>
    </Table>
    </DocumentElement>
      

  4.   

    CREATE           Procedure procInsertTable
    @insertxml ntext ,
    @tablename varchar(100)
    AS
           declare @hDoc int ,@sql varchar(4000)        
           EXEC sp_xml_preparedocument @hDoc OUTPUT, @insertxml
           set @sql=N'  insert into '+ @tablename+' select  * '
                          +'  from openxml('+rtrim(@hDoc)',''/DocumentElement/DataTable'',2)'
                          +'  with #aaa '
          exec(@sql)
      

  5.   

    milair answer HTTP://www.ebigear.com/Fund/PlayNews.php?NewsID=28982&ID=285885
      

  6.   

    declare @sql varchar(4000) ,@tablename varchar(10),@hDoc int
    set @tablename='ta'
    set @hDoc=1
    set @sql=N'  insert into '+ @tablename+' select  * '
                          +'  from openxml('+rtrim(@hDoc)+',''/DocumentElement/DataTable'',2)'--少了一个+号
                          +'  with #aaa '
    print @sql--查看一下是不是要得到的效果
      

  7.   

    +号我已经加了,还是错误:1 行: '1' 附近有语法错误测试了下,随着运行次数,'1' 中1 的数字会变大感觉,不能用openxml('+rtrim(@hDoc)+' 方式
      

  8.   


    现在的方案是改为下面的,可以了
    exec(N'
           declare @hDoc int         
           EXEC sp_xml_preparedocument @hDoc OUTPUT, '''+@insertxml+'''
           insert into '+ @tablename+' select  * '
                          +'  from openxml(@hDoc,''/DocumentElement/DataTable'',2)'
                          +'  with  '+ @tablename+' #aaa ')