Sqlserver 数据交互(将数据库A表A中的数据插入到数据库B中的表B)

--DECLARE 
  /*=================================================================================================================*/
  /*链接服务器的自定义虚拟名*/
  declare @linkedservervrName nvarchar(1000)
  set @linkedservervrName='DB_LinkedServer'
  /*链接服务器*/
  exec sp_addlinkedserver @linkedservervrName,'ms','SQLOLEDB','服务器名称'
  /*映射链接服务器的登陆映射*/
  exec sp_addlinkedsrvlogin @linkedservervrName,'false',null,'sa','密码'

 

/*=================================================================================================================*/
  /*链接服务器(即:中间库)是否成功*/
  BEGIN TRY
     EXEC sp_testlinkedserver  @linkedservervrName
     --写入日志
     set @strLogMessage='['+CONVERT(varchar(100), GETDATE(), 120) +']'+'中间库连接成功'
     insert into [SH_ReceivableSystem_Log_all] values(@strLogMessage)   
  END TRY
  BEGIN CATCH
   --写入日志
     set @strLogMessage='['+CONVERT(varchar(100), GETDATE(), 120) +']'+'中间库连接失败:'
     insert into [SH_ReceivableSystem_Log_all] values(@strLogMessage+ERROR_MESSAGE())   
   /*删除:映射链接服务器的登陆映射*/
   EXEC sp_droplinkedsrvlogin @linkedservervrName, NULL;
   
   /*删除:链接服务器*/
   exec sp_dropserver @linkedservervrName,null;
     /*返回日志信息*/
   select * from [SH_ReceivableSystem_Log_all]
    /*停止*/   
     return;    
  END CATCH;

 

BEGIN TRY
    exec sp_configure 'show advanced options',1 
   reconfigure 
   exec sp_configure 'Ad Hoc Distributed Queries',1 
   reconfigure 
   select * from openrowset('SQLNCLI','Server=服务器名称(IP);PWD=密码;UID=sa;','select * from 数据库B.dbo.表B')
   --写入日志
     DECLARE @ekkoXMLDoc int
     EXEC sp_xml_preparedocument @ekkoXMLDoc OUTPUT, @xmlinfo   --通过xml解析数据可以大批量插入数据
     INSERT INTO  [dbo.表B]([销售单据号],[发票类型],[税率],[客户名称],[商品编码],[商品名称],[含税金额],   --插入数据
     [规格型号],[计量单位],[销售数量],[备注])
     SELECT MainID,fapiaoType,Taxrate,customName,kaiPiaoCode,kaPiaoName,kaiPiaoMoney,guigeXinghao,jiliangDanWei,saleCount,RemarkAll
     FROM OPENXML(@ekkoXMLDoc, '/root/record',2)
     WITH
     (
      MainID VARCHAR(50),
      fapiaoType VARCHAR(50),
      Taxrate  numeric(14, 2),
      customName VARCHAR(50),
      kaiPiaoCode VARCHAR(50),
      kaPiaoName VARCHAR(50),
      kaiPiaoMoney numeric(14, 2),
      guigeXinghao VARCHAR(50),
      jiliangDanWei VARCHAR(50),
      saleCount numeric(14, 2),
      RemarkAll VARCHAR(50)
     )
     EXEC sp_xml_removedocument @ekkoXMLDoc
    insert openrowset('SQLNCLI','Server=服务器名称(IP);PWD=密码;UID=sa;','select * from 数据库B.dbo.表B')  select *from 表A
     set @strLogMessage='['+CONVERT(varchar(100), GETDATE(), 120) +']向中间库‘表插入信息,成功。'
     insert into [SH_ReceivableSystem_Log_all] values(@strLogMessage) 
     /*删除:映射链接服务器的登陆映射*/
   EXEC sp_droplinkedsrvlogin @linkedservervrName, NULL;
   
   /*删除:链接服务器*/
   exec sp_dropserver @linkedservervrName,null;
     
  END TRY

 

 

备注:

1、从数据库A表A数据连接到数据库B表B时,数据库连接必须能正常连接通畅,否则在执行时无法正常通过

2、如果在执行时报“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。”

就单独执行:exec sp_configure 'show advanced options',1  

 

posted @ 2014-03-03 11:38  LuckyZ  阅读(1368)  评论(0编辑  收藏  举报