zoukankan      html  css  js  c++  java
  • SQL Server跨库查询

    方式一:

    语句

    SELECT * FROM 数据库A.dbo.A a, 数据库B.dbo.B b WHERE a.field=b.field

       

    "DBO"可以省略

     

    SELECT * FROM 数据库A..A a, 数据库B..B b WHERE a.field=b.field

    方式二(在一个数据库挂上另一个数据库的外链):

    SqlServer数据库:

     

    --这句是映射一个远程数据库

    EXEC sp_addlinkedserver '远程数据库的IP或主机名',N'SQL Server'

     

    --这句是登录远程数据库

    EXEC sp_addlinkedsrvlogin '远程数据库的IP或主机名', 'false', NULL, '登录名', '密码'

     

    --登录后,可以用以下格式操作远程数据库中的对象

    select * from [远程数据库的IP或主机名].[数据库名].[dbo].[表名]

    insert into openrowset('sqloledb','192.168.0.100';'sa';'10060','select * from knss2009.dbo.yw_kck') select * from yw_kck

       

     

    示例:
    --
    创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '
    远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '
    用户名 ', '密码 ' 

    --
    查询示例 
    select * from ITSV.
    数据库名.dbo.表名 

    --
    导入示例 
    select * into 
     from ITSV.数据库名.dbo.表名 

    --
    以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' 

    方式三:

    --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1
    openrowset 比较推荐这种做法

    --
    查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql
    服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名

    --
    生成本地表 
    select * into 
     from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名

    --
    把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql
    服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名
    select *from 
    本地表 

    --
    更新本地表 
    update b 
    set b.
    A=a.
    from openrowset( 'SQLOLEDB ', 'sql
    服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表
    on a.column1=b.column1 

    --openquery
    用法需要创建一个连接 

    --
    首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '
    远程服务器名或ip地址 ' 
    --
    查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM
    数据库.dbo.表名 ') 
    --
    把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM
    数据库.dbo.表名 ') 
    select * from 
    本地表 
    --
    更新本地表 
    update b 
    set b.
    B=a.
    FROM openquery(ITSV,  'SELECT * FROM
    数据库.dbo.表名 ') as a  
    inner join 
    本地表 b on a.A=b.

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

     

     

    跨库取数使用示例(注意做判断)

    IF EXISTS(SELECT 1 FROM sys.synonyms WHERE name='SYN305_ys_CostAndCashSet')

    DROP SYNONYM SYN305_ys_CostAndCashSet

    GO

    CREATE SYNONYM SYN305_ys_CostAndCashSet FOR [dotnet_erp305_hnjy].dbo.ys_CostAndCashSet

    GO

     

     

    不允许远程访问出现异常解决方案:

    exec sp_configure 'show advanced options',1

    reconfigure

    exec sp_configure 'Ad Hoc Distributed Queries',1

    reconfigure

  • 相关阅读:
    LeetCode 1122. Relative Sort Array (数组的相对排序)
    LeetCode 46. Permutations (全排列)
    LeetCode 47. Permutations II (全排列 II)
    LeetCode 77. Combinations (组合)
    LeetCode 1005. Maximize Sum Of Array After K Negations (K 次取反后最大化的数组和)
    LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)
    LeetCode 1219. Path with Maximum Gold (黄金矿工)
    LeetCode 1029. Two City Scheduling (两地调度)
    LeetCode 392. Is Subsequence (判断子序列)
    写程序判断系统是大端序还是小端序
  • 原文地址:https://www.cnblogs.com/xulele/p/5327939.html
Copyright © 2011-2022 走看看