《Windows Azure Platform 系列文章目录

  问题

  1.我们在进行SQL Server开发的时候,经常会使用垮库查询。但是在默认情况下,使用Azure SQL Database不支持垮库查询。如下图:

  

  2.我们执行垮库查询语句,如下:

SELECT A.CustomerID,A.FirstName, A.LastName,B.OrderID FROM   CRMDB.dbo.CustomerInfo AS A LEFT JOIN OrderDB.dbo.OrderInfo AS B ON   A.CustomerID=B.CustomerID

  3.会出现以下的报错信息:

  

  4.可以看到,在默认情况下,使用Azure SQL Database不支持垮库查询。

  使用外部表:

  准备工作

  1.我们这里增加一些难度。我们在Azure SQL Database分别创建2个Server。如下图:

  

  注意,为了避免出现跨Azure数据中心之间的延时,请尽量在同一个数据中心创建Server。笔者在中国东部数据中心,创建2个Server

  2.我们在这2个Server下创建2个不同的Database,如下图:

  3.使用SSMS,连接到ew79sank1x.database.chinacloudapi.cn,1433,数据库CRMDB,创建表CustomerInfo

create table dbo.CustomerInfo
(
CustomerID nvarchar(100) not null primary key,
FirstName nvarchar(100) not null,
LastName nvarchar(100) not null
)
Go insert into CustomerInfo(CustomerID,FirstName,LastName) values
('','Jason','Zhang'),
('','Peter','Huang'),
('','Jason','Hu'),
('','Mike','Lee')

  4.使用SSMS,连接到lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB,创建表OrderInfo

create table dbo.OrderInfo
(
OrderID nvarchar(100) not null,
CustomerID nvarchar(100) not null,
)
Go insert into OrderInfo(OrderID,CustomerID) values
('',''),
('',''),
('',''),
('',''),
('',''),
('',''),
('','')

  创建外部表

  1.使用SSMS,连接到ew79sank1x.database.chinacloudapi.cn,1433,数据库CRMDB。执行以下脚本

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>',
SECRET = '<password>';

  请注意:上面的<username>和<password>,是连接到lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB的用户名和密码。注意是连接到另外的Server和Databse,不是自己。

  2.执行以下命令

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
(TYPE = RDBMS,
LOCATION = 'lcqyvtqri1.database.chinacloudapi.cn',
DATABASE_NAME = 'OrderDB',
CREDENTIAL = ElasticDBQueryCred,
) ;

  连接到lcqyvtqri1.database.chinacloudapi.cn,1433

  3.创建外部表

CREATE EXTERNAL TABLE dbo.OrderInfo
(
OrderID nvarchar(100) not null,
CustomerID nvarchar(100) not null
)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)

  注意:上面创建的External Table的Table Name和Table Schema,必须与Azure SQL Database: lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB中的表OrderInfo的Table Name和Table Schema一样。

  4.执行完毕后,我们可以在ew79sank1x.database.chinacloudapi.cn,1433,查看到原本保存在lcqyvtqri1.database.chinacloudapi.cn,1433的数据库OrderDB中的表dbo.OrderInfo。如下图:

  5.我们可以执行以下语句,查询dbo.OrdrInfo表的内容:

SELECT [OrderID],[CustomerID] FROM [dbo].[OrderInfo]

  

  执行结果,就是我们在lcqyvtqri1.database.chinacloudapi.cn,1433数据库OrderDB中的表dbo.OrderInfo的值

  

  6.执行查询语句:

SELECT A.CustomerID,A.FirstName, A.LastName,B.OrderID FROM dbo.CustomerInfo AS A LEFT JOIN dbo.OrderInfo AS B ON A.CustomerID=B.CustomerID

  如下图:

  

  Update 2019-05-23

  请注意,虽然CRMDB database中包含了OrderDB库中的表dbo.OrderInfo,但是我们在CRMDB database不能对dbo.OrderInfo执行插入操作,会报DML错误

  我们必须通过

exec sp_execute_remote
N'MyElasticDBQueryDataSrc', --这是步骤2中,指定的Data Source
N'INSERT INTO OrderInfo(OrderID,CustomerID VALUES ('2013010100008','005')' --这是具体的T-SQL语句

  即我们通过在远端(Server: lcqyvtqri1.database.chinacloudapi.cn),执行T-SQL语句

  参考资料:

https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-query-getting-started-vertical/

SQL Azure (18) 使用External Table实现垮库查询的更多相关文章

  1. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  2. Data import/export of Netezza using external table

    Introduction External table is a special table in Netezza system, which could be  used to import/exp ...

  3. 数据库SQL Server DAC 导入导出数据到SQL Azure问题

    对Export data-tier application报错的处理 Error:SQL71564 这个问题是数据库中一些对象如MS_Description,MS_DiagramPane1不支持DAC ...

  4. Oracle利用external table 查看trace文件

    1. 用下面的语句找到trace文件的路径 select * from v$diag_info where name='Default Trace File'; 2. 创建一个directory用来加 ...

  5. Using sql azure for Elmah

    The MSDN docs contain the list of T-SQL that is either partially supported or not supported.  For ex ...

  6. External Table

    CREATE TABLE AS SELECT,使用Oracle9i的External Table  Oracle 9i 的一项新特性就是 External Table,它就象通常的数据库表一样,拥有字 ...

  7. SQL点滴18—SqlServer中的merge操作,相当地风骚

    原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...

  8. Netezza External Tables --How to use local files in external table

    FROM: http://tennysusantobi.blogspot.com/2012/08/netezza-external-tables.html Netezza External Table ...

  9. 云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试

    如果数据库用的是SQL Server,那SQL Azure无疑是最吸引人的地方之一.在测试了虚拟机磁盘IO之后,我们迫不急待地进行了SQL Azure的测试. (一) 首先进入manage.windo ...

随机推荐

  1. 【MySQL】 查询某个数据库有多少张数据表

    SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'performanc ...

  2. shell获取文件最后100行,开头100行,指定开始行和结束行的内容

    文件最后100行:tail -n100 filePath: 文件开头100行:head -n100 filePath: 文件指定开始行和结束行的内容:sed '1,100p' filePath: 文件 ...

  3. MOD

    题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2318 ///这是哈理工校 ...

  4. vps_centos_7_系统环境常规配置备忘

    1.设置时区(东八区) 1> 选择亚洲东八区北京时间:tzselect (按照提示选择指定的序号直到北京时间) 2>替换时区文件 :cp /usr/share/zoneinfo/Asia/ ...

  5. oracle中批量生成字段类型的脚本

    select ' ALTER TABLE '||table_name || '  MODIFY( '|| column_name || ' DATE );' from USER_TAB_COLUMNS ...

  6. Maven依赖包下载慢--阿里云让你飞

    当用maven下载依赖包的时候,用官方的镜像库,那慢的真是要死要死的.后来在网上搜到英国的库(也是慢的不行),国内的oschina更是直接没法下载呀.不过还好突然发现阿里云也有镜像库,尝试了以下,速度 ...

  7. 【转】Oracle索引HINT的使用

    转自:Oracle索引HINT的使用       存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...

  8. sql2000分享 批量建表dev_编号

    批量建表dev_3970000000014到dev_3970000000035 declare @i bigint declare @j int ) ) ) ) set @sql = '' set @ ...

  9. 整理react native的资料

    http://blog.csdn.net/jj120522/article/details/51900016  -----RN常见的错误 http://www.mamicode.com/info-de ...

  10. ATL封装IE内核启示:使用Win32/ATL建立窗口

    开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...