zoukankan      html  css  js  c++  java
  • 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:	est.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
    '*****************************************************************************************
  • 相关阅读:
    MyBatis进阶(一)
    git命令整理
    今天的任务--git练习
    深入浅出JavaScript(一)
    数据结构_树_二叉搜索树
    网络_体系结构
    数据结构_树
    算法_五大经典搜索算法
    SpringMVC入门
    spring 线程异步执行
  • 原文地址:https://www.cnblogs.com/fm168/p/7084054.html
Copyright © 2011-2022 走看看