65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL 11 (代号 Denali) 入门 - 第一部分 (CTP 1 中的 SSMS 功能)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (16投票s)

2011年2月27日

CPOL

8分钟阅读

viewsIcon

42525

本文将从 SSMS 的角度探讨 Denali 为我们提供的新功能。

SQL 11 (代号 Denali) 入门 - 第一部分 (CTP 1 中的 SSMS 功能)

目录

  1. 引言
  2. 背景
  3. 安装
  4. 启动屏幕
  5. SSMS 增强功能
    1. 对象取消停靠 / 多显示器支持
    2. 循环剪贴板历史
    3. 任务列表
    4. 缩放/放大
    5. 序列节点包含
    6. 环绕
    7. 代码片段
  6. 参考文献
  7. 结论

引言

微软在技术领域最热门、最令人惊叹的开发之一于2010年11月8日面世,当时他们发布了 **SQL Server 2011(代号Denali)** 的社区技术预览1(CTP 1)版本。CTP1 提供32位和64位版本。

正如预期的那样,Denali为SQL爱好者(无论是开发人员、管理员还是商业智能(BI)专业人士)带来了一些新功能。在本系列中,我们将探讨SSMS的增强功能和新功能。其余的功能将在后续系列中介绍。

背景

在过去的几年里,微软为开发人员带来了许多新技术。随着SQL Server 2005(代号**Yukon**)的出现,SQL Server的术语发生了翻天覆地的变化,在随后的SQL Server 2008(代号**Katmai**)和SQL Server 2011(代号**Denali**)等版本中,通过引入新功能、增强功能和改进,保持了同样的步伐。

在本文中,我们将从SSMS的角度深入探讨Denali已经提供的新功能。后续文章将重点介绍TSQL、管理员和BI领域的增强功能。

安装

由于本文将重点介绍Denali的SSMS功能,因此,本文的范围不包括完整的安装说明。但是,请参考[文章](http://www.kodyaz.com/articles/how-to-install-sql-server-2011-installation-guide.aspx)进行安装。它提供了如何安装Denali、硬件和软件要求的详细方法。

启动屏幕

启动屏幕如下所示

1.jpg

登录服务器后,我们会看到用户界面屏幕

2.jpg

确保数据库兼容级别设置为SQL Server“Denali”(110)

3.jpg

SSMS 增强功能

SSMS现已与Visual Studio类似。以下是我们在SSMS增强方面将深入探讨的一些主要功能。

I. 对象取消停靠 / 多显示器支持

屏幕对象可以取消停靠,例如,下面的截图将显示取消停靠后的对象资源管理器

4.jpg 5.jpg 6.jpg

II. 循环剪贴板历史

Denali的另一个有趣功能是循环剪贴板历史

7.jpg

我们可以使用Ctrl+Shift+V在剪贴板之间切换。此功能已在Visual Studio中可用,现在也已集成到Denali中。

III. 任务列表

一个小型功能,我们可以在其中添加任务并为其分配优先级。可以从**视图->任务列表**获得,或按**Ctrl+\,T**。任务列表窗口将如下所示:8.jpg

我们可以按如下方式设置任务的优先级

9.jpg

任务完成后,我们可以勾选表示任务已完成的复选框。

10.jpg

IV. 缩放/放大

又一个小的补充功能,它有助于基于可用的枚举值来缩放文本。默认值为100%。

11.jpg

V. 序列节点包含

序列的概念在Oracle中由来已久。然而,SQL Server 2011已将此功能包含在内。

那么,什么是序列?

它生成一系列数字,类似于SQL表中的标识列。但其优势在于它独立于表。

如何创建序列对象

可以通过两种方式创建序列

a) 无需T-SQL脚本

b) 使用T-SQL脚本

a) 无需T-SQL脚本创建序列

在对象资源管理器中,“可编程性”下有新的“序列”节点。

12.jpg

右键单击“序列”节点,然后单击“**新建序列…**”选项。

13.jpg

我们将看到“新建序列”屏幕。

14.jpg

像所有数据库对象一样,序列也有一个名称(此处为MySequence)并分配给数据库架构(dbo)。

如果展开“数据类型”下拉列表,我们将获得关于序列支持的数据类型的相关信息。

15.jpg

**起始值**是序列对象返回的第一个值。

**递增值**可以接受正数和负数。它用于递增(正值)或递减(负值)序列对象的值。

**最小值和最大值**是序列的边界。

如果启用**循环选项**,则可以重复使用序列号。否则,当序列值达到最大限制时,它将报告错误。

b) 使用T-SQL脚本创建序列

我们也可以使用T-SQL脚本创建序列。

创建序列的一般语法如下:

CREATE SEQUENCE [schema_name . ] sequence_name
  [ AS { built_in_integer_type | user-defined_integer_type } ]
  | START WITH <constant>
  | INCREMENT BY <constant>
  | { MINVALUE <constant> | NO MINVALUE }
  | { MAXVALUE <constant> | NO MAXVALUE }
  | { CYCLE | NO CYCLE }
  | { CACHE [<constant> ] | NO CACHE }
</constant></constant></constant></constant></constant>

那么,让我们先创建一个序列,如下所示:

CREATE SEQUENCE GenerateNumberSequence
START WITH 1
INCREMENT BY 1;

执行此语句后,在“序列”节点中,我们将看到已创建的序列对象。

16.jpg

序列对象到位后,接下来我们可以创建表并使用以下方式填充数据:

Create Table tblWithSequence1
(
EmpId int not null primary key
,EmpName varchar(50) not null
);

Insert into tblWithSequence1(EmpId, EmpName)
VALUES (NEXT VALUE FOR GenerateNumberSequence, 'Niladri'),
(NEXT VALUE FOR GenerateNumberSequence, 'Deepak')

SELECT * FROM tblWithSequence1;

Denali的序列与先前版本的标识列有何不同?

考虑以下在SQL Server 2008中编写的程序。只需创建一个带有两列的表,其中一列是标识列。

Create Table tblWithOutSequence1
(
	EmpId int identity not null primary key
	,EmpName varchar(50) not null
)

Insert into tblWithOutSequence1
Select 'Niladri' Union All
Select 'Deepak'

Select * from tblWithOutSequence1

同样,创建具有相同架构的另一个表,如下所示:

Create Table tblWithOutSequence2
(
	EmpId int identity not null primary key
	,EmpName varchar(50) not null
)

Insert into tblWithOutSequence2
Select 'Niladri' Union All
Select 'Deepak'

Select * from tblWithOutSequence2

标识方法的缺点

可以想象,在创建表时,我们被迫在两个表中都编写标识列,即我们无法重用一个表的`EmpId`列到另一个表中。

但是,序列可以帮助我们做到这一点。

Denali序列的应用

我们已经用序列**GenerateNumberSequence**填充了一个表(tblWithSequence1)。

同样,如果我们创建另一个表,例如tblWithSequence2,我们可以轻松地使用**GenerateNumberSequence**,如下所示:

Create Table tblWithSequence2
(
EmpId int not null primary key
,EmpName varchar(50) not null
);

Insert into tblWithSequence2(EmpId, EmpName)
VALUES (NEXT VALUE FOR GenerateNumberSequence, 'Niladri'),
(NEXT VALUE FOR GenerateNumberSequence, 'Deepak')

SELECT * FROM tblWithSequence2;

**注意:**序列对象可以与表变量或临时表一起使用。

如果我们查看上面的序列程序,我们可以发现,对于每一行的插入,我们都使用`Next Value For`语句从序列中获取一个数字。然而,如果我们想获取一系列序列号,我们可以使用**sp_sequence_get_range**。

删除序列

由于序列是数据库对象,因此可以删除它。如果我们想删除一个序列,我们可以执行:

Drop Sequence GenerateNumberSequence

**注意:**在本文的第一部分,我提供了序列的基本介绍。下一部分将进行详细介绍。

VI. 环绕

此功能有助于T-SQL程序员将SQL语句块用IF语句、WHILE循环块或Begin...End块包围。

17.jpg

假设我们有如下代码:

Declare @i int
set @i = 0

print @i
set @i += 1

现在,如果我们想将上述程序转换为while循环,我们可以利用“环绕”功能,而不是手动编写。

**第一步:**选择将进入While块的部分。

18.jpg

**第二步:**右键单击,然后从弹出菜单中选择“**环绕”或按Ctrl+K, Ctrl+S**。

19.jpg

**第三步:**双击“While”代码片段,将生成以下代码:

20.jpg

我们只需要指定条件即可运行程序。太棒了!!!!

VII. 代码片段

最后但同样重要的是,我们将在本文中介绍的代码片段;这是从Visual Studio借用的另一个功能。

代码片段允许我们快速地将代码模板插入到查询窗口中,以执行一些常见的T-SQL任务。

代码片段可以通过**编辑->IntelliSense->插入代码片段**或使用键盘快捷键**Ctrl+K, Ctrl+X**来调用。

21.jpg

如果我们想插入一个内联表,只需双击“表”代码片段,如下所示:

22.jpg

代码片段将被生成:

23.jpg

创建自定义代码片段

除了内置代码片段,我们还可以创建自己的自定义代码片段。

在这里,我们将创建一个自定义代码片段来创建**[序列对象](#5.5)**。

以下是创建自定义代码片段的步骤:

步骤1:创建代码片段文件并保存

作为初始步骤,我们需要创建一个`.snippet`文件,它本质上是一个具有预定义架构的XML文件。因此,我们的代码片段文件如下所示:

 <?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>Sequence</Title>
      <Author>Niladri Biswas</Author>
      <Description>Code snippet for Sequence Creation</Description>
      <HelpUrl>http://msdn.microsoft.com/en-us/library/ff878091(v=sql.110).aspx</HelpUrl>
      <Shortcut></Shortcut>
    </Header>
	
    <Snippet>
      <Code Language="sql">
                       <![CDATA[
		CREATE SEQUENCE Sample_Sequence  		
 		START WITH 1
 		INCREMENT BY 1
 		MINVALUE -2147483648
 		MAXVALUE 2147483647 		 
		]]>
    </Code>
    </Snippet>
	
  </CodeSnippet>
</CodeSnippets>

将其保存在某个文件夹中,并将其命名为**CustomSequence.snippet**(请注意文件扩展名为`.snippet`),例如保存在名为**CustomSequence**的文件夹中。在本例中,完整路径为**C:\CustomSequence\CustomSequence.snippet**。

步骤2:在代码片段管理器中注册自定义代码片段

在SSMS中,选择**工具->代码片段管理器**,或调用快捷键**Ctrl+K, Ctrl+B**。代码片段管理器窗口将打开。

24.jpg

单击**添加…**按钮,然后选择已生成**CustomSequence.snippet**文件的文件夹(此处为**CustomSequence**)。在这种情况下,它将是**C:\CustomSequence**。25.jpg

可以看到,文件夹已添加。单击“确定”。

步骤3:调用代码片段

我们可以通过**工具->代码片段管理器**或使用快捷键**Ctrl+K, Ctrl+B**来调用代码片段。

26.jpg

双击“序列”,将在查询编辑器中生成如下代码片段:

CREATE SEQUENCE Sample_Sequence 
 		
 START WITH 1
 INCREMENT BY 1
 MINVALUE -2147483648
 MAXVALUE 2147483647 

**注意:**在代码片段管理器中,有一个“导入”按钮,它基本上导入代码片段文件而不是文件夹。

27.jpg

与其手动在基于XML的`.snippet`文件中编写代码片段,不如使用Code Plex中的[Snippet Designer](http://snippetdesigner.codeplex.com/)。

这是一个用于生成代码片段的优秀工具。

参考文献

  1. SQL Server Denali – 新功能
  2. SQL Server Management Studio 首次亮相
  3. SQL Server v.Next (Denali):新的 SSMS

结论

Denali 为我们带来了很多东西。我们讨论的功能只是CTP1中提供的一些强大功能。在CTP2中,他们将引入**Juneau**,用于在SQL Azure和SSMS之间实现应用程序开发的统一。在[下一系列](Denali_Tsql_Part_2.aspx)中,我们将介绍Denali CTP1中新增强的TSQL功能。敬请关注并分享您对本文的看法。

© . All rights reserved.