美文网首页
SQL Server 之 DB LINK

SQL Server 之 DB LINK

作者: EveryBetter | 来源:发表于2019-11-04 09:52 被阅读0次

    比如我一个数据库A想查询其他数据库B的数据 那么通过BDLINK可以实现

    -- 创建链接服务器
     exec sp_addlinkedserver 'DB_name' ,'' ,'SQLOLEDB' ,'远程服务器名或ip地址'
    
     exec sp_addlinkedsrvlogin 'DB_name' ,'false' ,null , '用户名' ,'密码'
    -- DB_name是别名 
    

    用户必须有管理员权限,否则出现权限问题

    -- 查询示例
    select * from   DB_name.数据库.dbo.test1  
    
    --导入示例
    select* into 表from DNB_name.数据库名.dbo.test1
    

    当不再使用的时候可以断开连接

    
    exec sp_dropserver 'DB_name' ,'droplogins'
    

    openrowset

    连接远程/局域网数据(openrowset/openquery/opendatasource)
    查询示例:

    SELECT* FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)
    
    --把数据拷贝到本地
    SELECT  *  INTO 表 FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)
    
    --把本地表导入远程表
    INSERT openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)SELECT  * FROM 本地表
    
    --更新本地表 
    UPDATE B  SET B.VALUE=A.VALUE FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名) AS A INNER JOIN 本地表 B ON A.column1= B.column1
    

    openquery

    首先创建一个连接创建链接服务器

    --连接服务器
    exec sp_addlinkedserver 'test_2' ,'' , 'SQLOLEDB' ,'远程服务器名或ip地址'
    
    --查询
    SELECT * FROM openquery(test_2,'SELECT * FROM 数据库.dbo.表名')
    
    --把本地表导入远程表
    
     INSERT openquery(test_2,'SELECT * FROM 数据库.dbo.表名')SELECT * FROM 本地表
    
    --更新本地表 
    UPDATE B SET B.VALUE=A.VALUE FROM openquery(test_2, 'SELECT * FROM 数据库.dbo.表名') AS A INNER  JOIN 本地表  B ON  A.column1= B.column1
    

    opendatasource/openrowset

    SELECT* FROM opendatasource('SQLOLEDB' ,'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').数据库.dbo.表
    
    --把本地表导入远程表
    
     INSERT opendatasource('SQLOLEDB' ,'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').数据库.dbo.表名 SELECT * FROM 本地表
    
    

    以上操作都必须有管理员权限以及打开<允许远程访问>

    相关文章

      网友评论

          本文标题:SQL Server 之 DB LINK

          本文链接:https://www.haomeiwen.com/subject/dysvuctx.html