--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