SQL Azure (18) 使用External Table实现垮库查询
《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语句
参考资料:
SQL Azure (18) 使用External Table实现垮库查询的更多相关文章
- 如何使用SQL SERVER数据库跨库查询
SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...
- 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 ...
- 数据库SQL Server DAC 导入导出数据到SQL Azure问题
对Export data-tier application报错的处理 Error:SQL71564 这个问题是数据库中一些对象如MS_Description,MS_DiagramPane1不支持DAC ...
- Oracle利用external table 查看trace文件
1. 用下面的语句找到trace文件的路径 select * from v$diag_info where name='Default Trace File'; 2. 创建一个directory用来加 ...
- Using sql azure for Elmah
The MSDN docs contain the list of T-SQL that is either partially supported or not supported. For ex ...
- External Table
CREATE TABLE AS SELECT,使用Oracle9i的External Table Oracle 9i 的一项新特性就是 External Table,它就象通常的数据库表一样,拥有字 ...
- SQL点滴18—SqlServer中的merge操作,相当地风骚
原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...
- 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 ...
- 云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试
如果数据库用的是SQL Server,那SQL Azure无疑是最吸引人的地方之一.在测试了虚拟机磁盘IO之后,我们迫不急待地进行了SQL Azure的测试. (一) 首先进入manage.windo ...
随机推荐
- getSlotFromBufferLocked: unknown buffer: 0xf3d94ca0
安卓6.0模拟器导致,换一个模拟器解决
- 一个神奇的POS -扫描 现场销售 开单打印票据 安卓物联网POS机 手持开单终端机 省时省力 高效准确!!
5寸高清彩屏,高端大气上档次,小巧轻便,独特的包胶防护,坚固耐用,外形精细,美观!与软件灵活对接,解决企业手工盘点,手工输单,库存管理等困难,提高准确率,提高工作效率!! 应用领域:适用于仓库.超市. ...
- Spring事务
1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.@Transactional 的 ...
- C#接口等基础知识
- Python中的生成器与yield
对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...
- cassandra写数据CommitLog
cassandra 两种方式: Cassandra-ArchitectureCommitLog Cassandra持久化-Durability 一种是配置commitlog_sync为periodic ...
- 【历史】JavaScript和Java没啥关系!————JavaScript简史
文章的开始先上张图: 图片拍摄自北京图书大厦,代表着现在国内应该是绝大部分书店的现状--Javascript书籍放在Java类当中.甚至很多业内人也一直认为Javascript是Java语言在浏览器内 ...
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...
- 文件处理命令:awk
awk擅长于对数据进行分析并生成报告,简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 使用方法:awk '{pattern +action}' {fi ...
- 插头dp
插头dp 感受: 我觉得重点是理解,算法并不是直接想出怎样由一种方案变成另一种方案.而是方案本来就在那里,我们只是枚举状态统计了答案. 看看cdq的讲义什么的,一开始可能觉得状态很多,但其实灰常简单 ...