Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41816
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2017-12-20 15:45
文章分类

全部博文(41)

文章存档

2018年(28)

2017年(13)

我的朋友

分类: 数据库开发技术

2018-01-09 13:50:53

使用SELECT语句创建表格

与SQL数据仓库相关的一个有趣的T-SQL难题是微软将其称之为的create table as select (CTAS)语句,它是一个CREATE TABLE语句,会从一个SELECT(选择)语句中导出其模式和初始数据。

据微软所述,CTAS语句是一个完全并行的操作,也是复制所有或部分表格内容的最简单和最快速的方法。 另外,CTAS语句也对创建临时表很有帮助,资讯网news.webhostingtalk.cn其正如以下示例所示:

#CustomerSales表格基于一个简单的SELECT语句,该语句可以查找每位客户的总销售额。 用于创建临时表的CTAS语句以WITH子句开头,它与在常规的CREATE TABLE语句中使用的WITH子句的作用相同。 在这种情况下,子句会创建一个聚簇columnstore索引,并将分发类型设置为ROUND_ROBIN。

SQL数据仓库中的临时表类似于SQL Server或SQL数据库中的临时表,但您不能创建全局临时表,也不能根据临时表创建视图。 不过,SQL数据仓库临时表存在于会话级别,这意味着您可以从会话内的任何位置访问这些表格。

除了复制表格和创建临时表之外,CTAS语句对于解决SQL数据仓库不支持的T-SQL选项这一问题也很有帮助,这些选项包括包含ANSI连接的SELECT 。。. INTO(选择。。成)、MERGE(混合)、UPDATE(升级)和DELETE(删除)语句:

· 您只需移植逻辑就可以将SELECT 。。. INTO语句重写为CTAS语句。

· 您可以将MERGE语句替换成多语句事务。请首先从CTAS语句开始,该语句会使用UNIONALL运算符来创建基于连接在一起的SELECT语句的表格。

· 如果UPDATE或DELETE语句包含ANSI连接,那您可以使用多语句事务来替换该语句,该多语句事务会首先根据SELECT连接创建表格,然后会使用该表来创建要修改的表格的隐式联接。

您可以在Azure帮助主题《SQL数据仓库中的Create Table As Select (CTAS)》中找到这三个替代方案以及其相应示例的详细信息。

创建视图和存储过程

与SQL Server和SQL数据库一样,视图会为您提供一种简便方法来抽象使用优化表连接或其它T-SQL元素的基础模式和持续查询。 另外,在SQL数据仓库中创建视图也与在SQL Server或SQL数据库中创建视图相似,其如以下示例所示:

正如您现在可能预测的那样,SQL数据仓库视图并不像SQL Server和SQL数据库中的视图那么强大。 首先,SQL数据仓库视图只能包含元数据,而且您无法创建索引(实例化)视图或可更新视图。 另外,这些视图不支持加密、模式绑定或向DB-Library、ODBC和OLE DB API传送元数据信息。

SQL数据仓库还允许您创建存储过程,不过这些过程也不如SQL Server中的存储过程那么强大。实际上,它们是相当基本的,主要由参数定义和主语句块组成,其如下例所示:

我们在这里正在做的是创建一个根据特定客户ID来检索该客户总销售额的过程。 接着,我们可以使用EXECTUTE(执行)语句来运行该过程,就像在SQL Server中所做的那样:

在此示例中,我们传入了4367 这一客户ID ,从而获取该客户的总销售额。

从其最基本的层面上来说,使用存储过程非常简单,但是您还是要注意SQL数据仓库中存在着一系列的限制。 例如,您无法创建CLR存储过程或临时的、编号的或扩展的过程。而且,这些存储过程也不支持默认的、表值的或只读的参数,也不提供加密或复制选项。

阅读(690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~