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