方法一:用OPENDATASOURCE
[SQL SERVER] 跨服务器查询
--1 打开 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure SELECT * FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=192.168.0.88;User ID=sa;Password=Sa123456' ).AIS20141027173850.dbo.t_ICItem --2 关闭 exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_configure 'show advanced options',0 reconfigure
--下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。同样在执行前要向上面一样打开配置 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\test.xls";User ID=sa;Password=sa;Extended properties=Excel 5.0')...xactions
方法二:用链接服务器
-- ---B.创建链接服务器 --exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址' --exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码' --exec sp_serveroption 'srv_lnk','rpc','true' --exec sp_serveroption 'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程 DECLARE @serverName VARCHAR(20) SET @serverName = '127.0.0.1' IF NOT EXISTS ( SELECT 1 FROM master.dbo.sysservers WHERE srvname = @serverName ) BEGIN ---用SQL命令建立与本Server的Linked Server. EXEC sp_addlinkedserver @serverName, '', 'SQLOLEDB', '127.0.0.1' EXEC sp_addlinkedsrvlogin @serverName, 'false', NULL, 'sa', '123456' EXEC sp_serveroption @serverName, 'rpc', 'true' EXEC sp_serveroption @serverName, 'rpc out', 'true' --这个允许调用链接服务器上的存储过程 --EXEC sp_dropserver @serverName,'droplogins' --删除链接服务器 END --调用 INSERT INTO #tmp02 EXEC [127.0.0.1].AIS20160331212903.dbo.rk_fm_proc_cg_inner @year,@month ,@deptName
方法三:用程序分别连接两个数据库实现
此方法在实际应用中比较普遍,也较简单;
其它方法:OPENROWSET、OPENQUERY
与上面的类似,不再累述。
----------------------------------
VBA中的实现也是类似的:
Function saveBeg(sheetName As String, tabName As String, fieldNames As String, sqlWhere As String) As Boolean Dim Str_coon As String, StrSQL As String, sqlCon As String If (connStr = "") Then SetK3SqlConn End If sqlCon = getOdbcConn Rem 添加Excel数据到SQLSERVER:成功 Str_coon = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';Data Source =" & ThisWorkbook.FullName '//OFFICE2007 StrSQL = "INSERT into " ' StrSQL = StrSQL & " [odbc;Driver={SQL Server};" '//在空格+[:后面是固定格式 ' StrSQL = StrSQL & "Server=JUST;" '//服务器名称或地址 ' StrSQL = StrSQL & "Database=AIS20160331212903;" '//数据库名称 ' StrSQL = StrSQL & "UID=sa;PWD=Sa123456]" '//用户名,密码] StrSQL = StrSQL & sqlCon StrSQL = StrSQL & "." & tabName ' StrSQL = StrSQL & " SELECT 会计期间 as FPeriodName,部门代码 as FDeptNumber FROM [" & sheetName & "$]" StrSQL = StrSQL & " SELECT " & fieldNames & " FROM [" & sheetName & "$] where 1=1" StrSQL = StrSQL & sqlWhere saveBeg = ExecSqlUpdateOrInsert(StrSQL, Str_coon) Dim d As String d = "dd" End Function '***************************************************************************************** '函数名: ExecSqlUpdateOrInsert '函数功能: 执行SQL语句,一般为添加、修改删除语句 '返回值: 返回一个布尔值,是否成功完成 '参数1: StrSQL 字符类型 SQL查询语句 '参数2: Str_coon 字符类型 链接语句 '使用方法: StrSQL=“update [sheet1$i8:i9] set f1='Your Pleasure” ' StrSQL="insert into [sheet1$k2:l6] (f1,f2) values (9,'mine')" ' Bool_1= ExecSqlUpdateOrInsert(StrSQL, Str_coon) '***************************************************************************************** Function ExecSqlUpdateOrInsert(ByVal StrSQL As String, ByVal Str_coon As String) As Boolean '//执行SQL语句,一般为添加、修改删除语句 'On Error Resume Next ' 改变错误处理的方式。 Err.Clear If StrSQL = "" Then ExecSqlUpdateOrInsert = False: Exit Function Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接 Set rs = CreateObject("adodb.recordset") CN.Open Str_coon CN.Execute (StrSQL) If Err.Number <> 0 Then ExecSqlUpdateOrInsert = False Else ExecSqlUpdateOrInsert = True CN.Close '//关闭ADO连接 Set rs = Nothing Set CN = Nothing '//释放内存 End Function '*****************************************************************************************