sql 跨服务器查询数据

方法一:用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
'*****************************************************************************************

 

转载于:https://www.cnblogs.com/fm168/p/7084054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值