Sql server 如何将自动XML结果插入表中?

Sql server 如何将自动XML结果插入表中?,sql-server,xml,sql-server-2008,insert,Sql Server,Xml,Sql Server 2008,Insert,我已使用从表中检索到值 select * from tableABC for xml auto, elements 现在,在另一台服务器上有一个确切的表tableABC,我需要在其中插入这些检索到的值 如何实现这一点?测试表和数据 create table tableABC(A int, B bit, C varchar(10)) insert into tableABC values(1, 1, 'Row 1') insert into tableABC values(2, 0, 'Ro

我已使用从表中检索到值

select *  from tableABC 
for xml auto, elements
现在,在另一台服务器上有一个确切的表tableABC,我需要在其中插入这些检索到的值

如何实现这一点?

测试表和数据

create table tableABC(A int, B bit, C varchar(10))
insert into tableABC values(1, 1, 'Row 1')
insert into tableABC values(2, 0, 'Row 1')
获取xml

declare @xml xml
set @xml = (select *
            from tableABC
            for xml auto, elements)
XML数据

<tableABC>
  <A>1</A>
  <B>1</B>
  <C>Row 1</C>
</tableABC>
<tableABC>
  <A>2</A>
  <B>0</B>
  <C>Row 1</C>
</tableABC>
编辑复制整个语句以测试其是否有效

use tempdb
go

create table tableABC(A int, B bit, C varchar(10))

go
insert into tableABC values(1, 1, 'Row 1')
insert into tableABC values(2, 0, 'Row 1')

declare @xml xml
set @xml = (select *
            from tableABC
            for xml auto, elements)

insert into tableABC(A, B, C)
select 
  r.value('A[1]', 'int'),
  r.value('B[1]', 'bit'),
  r.value('C[1]', 'varchar(10)')
from @xml.nodes('tableABC') t(r)

select *
from tableABC

go

drop table tableABC
结果是表ABC中的重复行

A           B     C
----------- ----- ----------
1           1     Row 1
2           0     Row 1
1           1     Row 1
2           0     Row 1
测试表和数据

create table tableABC(A int, B bit, C varchar(10))
insert into tableABC values(1, 1, 'Row 1')
insert into tableABC values(2, 0, 'Row 1')
获取xml

declare @xml xml
set @xml = (select *
            from tableABC
            for xml auto, elements)
XML数据

<tableABC>
  <A>1</A>
  <B>1</B>
  <C>Row 1</C>
</tableABC>
<tableABC>
  <A>2</A>
  <B>0</B>
  <C>Row 1</C>
</tableABC>
编辑复制整个语句以测试其是否有效

use tempdb
go

create table tableABC(A int, B bit, C varchar(10))

go
insert into tableABC values(1, 1, 'Row 1')
insert into tableABC values(2, 0, 'Row 1')

declare @xml xml
set @xml = (select *
            from tableABC
            for xml auto, elements)

insert into tableABC(A, B, C)
select 
  r.value('A[1]', 'int'),
  r.value('B[1]', 'bit'),
  r.value('C[1]', 'varchar(10)')
from @xml.nodes('tableABC') t(r)

select *
from tableABC

go

drop table tableABC
结果是表ABC中的重复行

A           B     C
----------- ----- ----------
1           1     Row 1
2           0     Row 1
1           1     Row 1
2           0     Row 1

@安多玛请看编辑。。。我放弃了XMLSChema的必要性…所以现在我有了一个不需要插入模式的XML文档。这里有客户机吗?或者这是存储过程中的客户机吗。您是要在目标上调用存储的进程,还是只执行一些sql?@Conrad Frix No Client。任何实现插入的方法..SP都可以。@Andomar请参见编辑。。。我放弃了XMLSChema的必要性…所以现在我有了一个不需要插入模式的XML文档。这里有客户机吗?或者这是存储过程中的客户机吗。您是要在目标上调用存储的进程,还是只执行一些sql?@Conrad Frix No Client。任何实现插入的方法..SP都可以。@GilliVilla-添加了一些东西供您测试。我猜你的代码中有一个输入错误。@GilliVilla-添加了一些东西供你测试。我猜你的代码有错。