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