SQL Server 入门学习

1、 简单了解

2、 SQL Server 管理套件(SSMS)

SQL Server 的管理套件(SSMS)是 SQL Server 的主管理控制台;

SSMS 中您可以创建数据库对象(如数据库,表,存储过程,视图等),在数据库中查看该数据,配置用户帐户,执行备份,复制,进行数据库之间的数据传输,等等;

SQL Server 管理套件的图形用户界面,做的最多的事情是 “点击”;

SSMS 使您能够运行 SQL 脚本接口,因此也有需要编程/脚本任务。许多任务可以通过 GUI 或 SQL 脚本来执行,所以你自己的选择使用哪一个。例如,您可以创建一个使用 GUI 或通过运行SQL 脚本的数据库。虽然如此,但你仍然需要 GUI 运行脚本。

3、SQL Sever 系统数据库

在我们安装 SQL Server 的时候,会自动创建下面的四个数据库。

  • master
    master 数据库记录了所有的 SQL Server 数据库系统的系统级信息,如用户帐户,配置设置,并在所有其他数据库信息。
  • model
    model 数据库是一个模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以 Model 数据库为副本数据库,并更改成你创建数据库时所用的名称。
  • msdb
    msdb 数据库是 SQL Server 代理的数据库,用于配置警报使用 SQL Server 代理和预定作业等。
  • tempdb
    tempddb 数据库是由 SQL Server 用于暂时存储数据的,这其中包含所有临时表,临时存储过程,并通过 SQL Server 生成任何其他临时存储需求。

这些系统数据库有它们特有的用处,系统数据库是我们新建数据库的模板。

4、开始创建一个新的数据库

下述步骤将展示如何使用 SQL Server 管理套件在 SQL Server 2014 创建数据库。

  1. 在对象资源管理器中,右键单击数据库文件夹/图标,然后选择 New database...:

  2. 进行数据库命名,此处叫 “TaskTracker”,然后点击 “OK”:

  3. 很简单,一个新数据库已经创建完成了。

新数据库显示

上面创建的新数据库会出现在对象资源管理器中的数据库部分。如下图所示:

新的数据库是基于模型数据库,该模型数据库是被用作每当创建一个新的数据库模板的系统数据库。

在左侧窗格中浏览数据库,并展开左侧列表,会看到数据库已经包含了许多对象,例如,它已经包含的系统功能,系统视图,存储系统过程,和(隐藏)系统表。这些都是提供有关数据库的信息系统对象。

其他选项

我们刚刚创建数据库的时候使用的是默认的选项。当创建的数据库,数据文件和一个事务日志中创建。他们在服务器的默认位置创建。

我们可以在创建数据库的时候给这些文件指定一个不同的位置,我们也可以改变其它的规范,比如是否允许将文件自动增长(如它存储越来越多的数据),如果是这样,增长应进行管理。

我们可以通过在数据库中右击选择属性来访问这些选项:

在属性对话框中有大量的可以更改数据库配置的选项。在左上面板点击各个项目,会显示各自的选择。

目前,我们不对这些配置进行更改,而是保留/使用一切的默认设置。

好了,到现在我们已经创建好了一个数据库,过程很简单是吧?但是唯一的不足就是它还只是一个空数据库,里面什么也没有,接下来,我们就要学习如何在一个空数据库中添加数据了。

5、在SQL Server 2014创建表

我们依旧选择使用 SQL Server 管理套件(SSMS) 在 SQL Server 2014 数据库中创建一个表。

  1. 确保有正确的数据库扩展(在我们的例子中,数据库是“TaskTracker”),右键单击表图标并选择Table......从上下文菜单:

  2. 一个新表将在设计视图中打开。当你打开了这样的界面,请执行以下操作:
    1. 在截图中的值,完成细节的列名列数据类型列,允许空列。
    2. 通过右键单击旁边的 TaskId 按钮(即其中关键出现在下面的截图同一地区),并选择设置主键 TASKID 列主键字段。
    3. 通过设置是一种身份为 Yes (你可以找到在身份规格部分在底部窗格此选项)使 TASKID 列标识列。需要注意的是在底部窗格中设置的值,需要首先选择在顶部窗格中的列名。我们设置这个专栏是一个自动编号列 - 它会自动生成创建的每个记录一个新数值。
    4. 设置 dateCreated 列的缺省值为 (getdate())。 (这将该字段为每个新记录自动插入当前日期到)。

    我们现在做的是创建的列名,指定可以输入数据类型,并设置默认值。限制每一列的数据类型是非常重要的,以帮助维护数据的完整性。例如,它可以防止我们意外输入任务名称到一个字段,用于存储当前日期。SQL Server 将阻止进入表,数据不会粘附到我们已经为每列设置的规则的数据。

  3. 保存该表通过选择 File > Save Table_1 或者通过表的选项卡,然后从上下文菜单中选择保存 Table_1上单击鼠标右键:

  4. 当系统提示,命名表(我们称之为 Tasks ):

新表显示

新建的表会出现在数据库表部分,如果它不能显示出来,请尝试刷新对象资源管理器。 

您可以通过右键单击 onTables 并单击从上下文菜单刷新:

 

下图是显示了该表以及列文件夹扩展:

好了,这样就建立好一个数据库的表了。

6、数据库添加数据

以下是数据库添加数据的全部方法的大概介绍:

  • 手动输入: 直接将数据输入到数据库即可。
  • 使用复制/粘贴功能: 类似于以前的选项,但是这一次是从其他来源的数据复制,然后粘贴到你的数据库中的表。
  • 直接导入: 可以使用导入和导出向导从另一个源导入数据。
  • 使用SQL脚本: 可以运行一个包含所有数据插入的SQL脚本。
  • 应用/网站: 使用者通过下列方式:应用程序或网站更新数据库。

(1)手动输入数据

在数据库中选择“编辑前200行”选项,然后就可以手动直接输入数据到表行中了。

手动输入的数据是确定的,而且只能一点点输入,遇到大量的数据的时候,操作会变得很繁重,而且它不满足大多数业务的需求,而且不利于更新。

下面显示了如何手工直接输入数据到表:

  1. 在对象资源管理器中,右键点击你要打开的表,然后选择 “Edit Top 200 Rows(编辑前200行)” :

  2. 然后就可以将数据直接输入到表中了。

    需要注意的是在使用我们刚刚创建的表,我们并不需要输入数据到 TaskId 和 dateCreated 这两列。 这是因为他们将被自动填充(请记住,我们设置 TASKID 是唯一标识并且dateCreated 会以(GetDate()))填充。 无需为 StatusId 输入任何东西,因为我们还没有创建状态表,再加上我们的表设计使该字段为空(我们选择允许空值)。

(2)使用复制/粘贴功能

通过从另一数据源复制并粘贴到数据库表的方法也能添加数据库中的数据。

这将需要在源表具有相同的列的目标表。

类似于上面的手动方法中,这适合一个小数量的记录。

以下是具体的操作描述:

  1. 从数据源得到所需的所有记录;
  2. 在目标数据库(例如:一个要填充数据),目标表上单击鼠标右键,然后选择编辑前200行;
  3. 在最左边的列(它更是一个按钮,最左边的列的左侧,可以选择整个行),然后从上下文菜单中选择 “Past(粘贴)”,选择通过右键单击一个空行:

如果需要粘贴超过200行,单击显示 SQL 窗格图标,从工具栏中显示的 SQL 语句显示后面200行。

简单地根据需要将200改变为数量较多的行。

 

注意:在遇到多量数据的时候,这种方式可能要多次执行,或需要使用其他方法。

(3)直接导入

当然也可以从另一个数据源导入数据。

导入数据与复制/粘贴的方法相似,但是它更加灵活,可以更合适于许多场合。

例如,您可以选择从多个视图和表中的数据,可以写一个查询就可以导入需要的数据。

要导入数据,在数据库上单击鼠标右键,并选择 Tasks > Import Data... 并从那里按照向导执行操作。

在 SQL Server 中导入和导出向导数据,可以将数据复制到并从其中一个托管的 .NET Framework 数据提供程序或本机 OLE DB 提供程序可用的任何数据源。

这些包括:

  • SQL Server
  • 普通文件
  • Microsoft Office Access
  • Microsoft Office Excel

您也可以从 Windows 开始菜单中启动 SQL Server 导入和导出向导,从内部 SQL Server 数据工具(SSDT),并通过在命令提示符(通过运行 DTSWizard.exe,你可能会找到在:C:Program FilesMicrosoft SQL Server100DTSBinn or inC:Program FilesMicrosoft SQL Server120DTSBinn 或其他位置,具体取决于您的配置和驱动器盘符)。

7、SQL Server SQL脚本

很多时候,使用包含需要插入数据的 SQL 脚本会更加有效。

您可以使用 SQL INSERT 语句插入指定数据。

SQL 脚本是静态插入/引用数据,它们可以存储并重新运行需要它的任何时间(例如在另一数据库)。脚本通常不进行数据的不断变化(如客户详细信息)那么好。你可能不会被保留过时的数据在一个副本的SQL脚本。但总有例外。例如,你可以使用这样一个脚本来填充客户表,用于测试/开发环境。

应用/网站

大多数的 SQL Server 数据库后端数据存储为一个前端应用程序。该应用程序的用户负责将数据添加到数据库(以编辑)。 因此,许多表中您的数据库将通过应用程序进行更新。在这种情况下,应用程序被更新是使用 SQL 脚本到数据库。

这些脚本和那些我们上面讨论的区别在于,在应用程序正在使用的脚本将是动态的。他们将接受数据作为传递给脚本的参数。因此,用户可以输入,电子邮件地址到应用程序中,但他并不知情在应用程序运行的 SQL 脚本,需要他的电子邮件地址,验证它,把它添加到脚本,如果通过了所有的业务/验证规则,最后将其插入到数据库中。

这些 SQL 脚本可以直接放置到您的网站的代码(PHP,ColdFusion的等),也可以将它们存储在数据库中的存储过程或视图。

利用 SQL 脚本我们能做很多事情,比如插入数据、读取数据、更新数据以及删除数据等;它们也可以用于创建数据库对象,如表,视图,存储过程,他们甚至可以用于创建整个数据库、数据、用户等。

什么是 Transact-SQL

SQL Server 支持 Transact-SQL 作为脚本语言。

Transact-SQL 是基于 SQL(结构化查询语言),它是用于应用程序和它们的数据库之间的接口的编程语言。

Transact-SQL 是一个相对容易的语言学习,这里提到的 SQL 脚本,意思就是一个 Transact-SQL 脚本。

SQL 语句

SQL 脚本通常由一个或多个“语句”得来的,每个语句告诉 SQL Server 该怎么做。

SQL 脚本可以包含许多语句。例如,SQL 脚本可以包含一个语句创建一个表,另一份声明将数据插入到该表,而另一份语句中,以选择所有刚刚插入到表中的数据。事实上,SQL 有用于确切操作的具体语句:CREATE语句,INSERT语句和SELECT语句。

SQL语句示例

最简单的 SQL 语句就是 SELECT 语句。

下述是一个SELECT语句最简单的例子:

SELECT * FROM Tasks

上述语句表示从任务表中选择所有列,其中(*)表示 “所有列”。

稍微修改上述语句就可以只返回一个特定的列。

我们添加一个 WHERE 子句来过滤数据,只选择我们想要的数据:

SELECT TaskName FROM Tasks
WHERE StatusId = "3"

上述语句从任务表 TaskName 中选择特定列,只返回那些具有 StatusId 为3的记录,值为3 的记录表示了具体的意思。在我们的 TaskTracker 数据库中,我们将创建一个新的表称为Status,我们将指定“3”是指什么。这些数字只是在 StatusId 字段中(我们指定为标识列 - 一个自动编号)的值。这些数字在 StatusName 字段每个相应值将告诉我们实际上是什么状态。

然后,一旦我们已经创建了状态表中,我们可以修改上面的SQL语句,以包括状态表,以便我们可以编写为WHERE StatusName=“To Do”,而不是试图记住“To Do”数字是什么。

使用SQL脚本创建表

下面使用SQL脚本在我们的数据库中新建一个名为 Status 的表。

在此脚本中,我们并不容许任何 NULL 字段(因此 NOT NULL 毗邻每一列)。

我们也将创建主键 StatusId 字段,我们设定的默认值的 dateCreated 字段,使用(getdate())。

请执行以下操作:

  1. 将脚本复制到剪贴板
  2. 在 SQL Server 管理套件,单击工具栏上的新建查询按钮
  3. 将脚本粘贴到查询窗口
  4. 点击该工具栏上的执行按钮:

一旦脚本运行,你应该看到一条消息,读取命令已成功完成。

下面提供的是脚本:

CREATE TABLE Status(
	StatusId int IDENTITY(1,1) NOT NULL,
	StatusName varchar(50) NOT NULL,
	DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated  DEFAULT (getdate()),
	CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId)
)

键盘快捷键

注:也可以通过键盘上的 F5 键来运行一个查询。

另外,你甚至可以通过选择要运行的部分,然后按 F5 运行查询的一部分。

这包含大量的 SQL 语句的较大的脚本,但是,当由于某种原因,只要运行的一个或两个(或甚至运行所有这些,但只是一次一个)。

通过SQL脚本添加数据

通过 SQL 脚本添加数据将使用 INSERT 语句将数据插入到指定的表。 

你可以使用脚本插入数据到所有列在表中,或者只是那些指定的表。

使用下面的脚本将数据插入 Status 表,然后选择该数据:

INSERT INTO Status (StatusName) VALUES ('To Do');
INSERT INTO Status (StatusName) VALUES ('In Progress');
INSERT INTO Status (StatusName) VALUES ('Done');

SELECT * FROM Status

这里是这个样子的:

正如你所看到的,查询的结果显示在底部窗格中。

交叉参考数据

现在,我们已经得到了 Status 表,让我们把值添加到任务表的 StatusId 字段中(还记得我们保留那个字段为空的所有记录,因为我们还没有Status表)。

所以我们增加值要将任务表链接到 Status 表。在任务表中的每个记录现在将有一个 StatusId,它的值可能是 1,2 或 3(在状态表的 StatusId 字段中匹配的值)。

现在,我们需要使用 UPDATE 语句(因为我们正在更新记录,而不是插入新的)。

运行下面的脚本:

UPDATE Tasks
SET StatusId='1'
WHERE TaskId='1';

UPDATE Tasks
SET StatusId='1'
WHERE TaskId='2';

UPDATE Tasks
SET StatusId='2'
WHERE TaskId='3';

UPDATE Tasks
SET StatusId='3'
WHERE TaskId='4';

UPDATE Tasks
SET StatusId='3'
WHERE TaskId='5';

UPDATE Tasks
SET StatusId='2'
WHERE TaskId='6';

UPDATE Tasks
SET StatusId='1'
WHERE TaskId='7';

SELECT * FROM Tasks

现在应该看到其 StatusId 字段中填写的所有记录您的任务表:

合并脚本

事实上,我们可能只是很容易地结合上述所有脚本并运行它们为一体。我只保留了它们,才能分离出来,使其更易于了解哪些部分做什么。

区分大小写

SQL 语句不区分大小写。

下面的语句都是执行同样的事情:

  • SELECT * FROM TASKS
  • SELECT * FROM Tasks
  • Select * From Tasks
  • select * from tasks

数据库管理

大多数的数据库管理任务(如创建用户,备份等),可以在 SSMS 通过图形用户界面进行编程,可以通过 SQL 脚本来执行。

本教程集中使用的图形用户界面,主要是因为它通常是一个更容易为新用户得到一个简单的入门。 当你更熟悉 SQL Server,就可以使用 SQL 脚本来执行许多任务,也可通过图形用户界面做自己的事情。

8、SQL Server查询设计器

查询分析器是一个图形化的数据库编程接口,是SQL server 客户端的重要组成部分。在构建复杂的查询,涉及到许多表,视图等的时候,查询分析器特别有用。

查询设计器还可以有利于学习如何编写 SQL。通过查询设计器生成 SQL,可以学习 SQL,学习语法等。

查询分析器如何建立查询

使用查询设计器建立查询的具体操作如下:

  1. 在工具栏上单击新建查询(New Query)打开一个新的查询
  2. 通过选择打开查询设计器 Query > Design Query in Editor... 从顶部菜单:

  3. 选择要运行对查询(在本例中,我们将添加两个表),单击添加,单击关闭关闭对话框表:

  4. 选择列,想通过检查旁边的列名的复选框,在查询中显示。在中间窗格中,你可以取消一个输出复选框以隐藏该字段被显示在查询运行(但字段仍然会参与查询)。添加值下的过滤器来缩小结果到只有那些感兴趣的(在这个例子中,它是创建一个 WHERE 子句只选择那些记录了 StatusId“1” - 也就是 “To Do”):
  5. 当满意查询后点击OK。
  6. 该查询将出现在查询窗口,在这里可以运行它,运行任何其他查询相同的方式(点击!执行或按F5)

      当点击OK,会发现工作空间中已经添加了查询。然后,就可以像其他查询一样运行它:

9、SQL Server创建视图

从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据 

从数据库系统内部来看,一个视图是由 SELECT 语句组成的查询定义的虚拟表(因为一个视图可以拉动多个表,并汇总数据在一起并将其显示,就好像它是一个单一的表)

视图是由一张或多张表中的数据组成的,当你运行视图,会看到它的结果,就像打开一个表时一样。

从数据库系统外部来看,视图就如同张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。

SQL Server视图的优点

视图可以执行以下操作:

  • 限制访问特定的表中的行
  • 限制访问特定的表中的列
  • 从多个表中加入列,并呈现出来,好像他们是一个单一的表的一部分
  • 呈现汇总的信息(如COUNT函数的结果)

SQL Server视图语法

通过使用 CREATE VIEW 语句创建一个视图,其次是 SELECT 语句,如下:

CREATE VIEW ViewName AS
SELECT ...

SQL Server创建视图

我们以前使用的查询设计器创建两个表中选择数据的查询。

现在让我们将查询保存为一个名为 “ToDoList” 的视图。

我们需要做的就是把 CREATE VIEW ToDoList 的 AS 查询,如下:

CREATE VIEW ToDoList AS
SELECT	Tasks.TaskName, Tasks.Description
FROM	Status INNER JOIN
			Tasks ON Status.StatusId = Tasks.StatusId
WHERE	(Status.StatusId = 1)

运行该脚本,在左窗格中刷新浏览文件夹,你会看到视图就在左窗格中:

SQL Server 运行视图

创建视图后,就可以简单地查看结果,就像你会选择任何表。

可以简单地键入 select * from todolist,它会运行完整的查询,而不是输入出大量的 SELECT 语句的 INNER JOIN :

注:也可以在视图上单击鼠标右键,并选择 "Select Top 1000 Rows".

数据更新

该视图将返回最新的数据。

如果表中的数据发生变化时,视图的结果会改变过;所以,如果要添加新任务以及状态 "To Do", 下一次运行来看,这将包括在结果集中的新纪录。

修改视图

通过使用 ALTER 修改现有的视图,而不是 CREATE。

如果我们想要更改视图就要使用 StatusName 字段,而不是 StatusId,做法如下:

ALTER VIEW ToDoList AS
SELECT	Tasks.TaskName, Tasks.Description
FROM	Status INNER JOIN
			Tasks ON Status.StatusId = Tasks.StatusId
WHERE	(Status.StatusName = 'To Do')

注:使用查询设计器也可以右键单击视图,然后选择设计来修改您的视图。

正如你所看到的,视图让您保存查询,以便可以做一个 SELECT,再次运行它也会比较简单。

但它们的确有其局限性:它们允许选择数据,但不允许执行任何业务逻辑,如条件语句等。 

9、SQL Server存储过程

SQL Server 中视图通过简单的 SELECT 查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到这点。

什么是存储过程?

存储过程 Procedure 是一组为了完成特定功能的 SQL 语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。

由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的 SQL 语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

存储过程的优点

下面是一些在使用存储过程的主要优点:

好处说明
模块化编程可以写一个存储过程一次,然后一次又一次地调用它,从应用程序的不同部分(甚至多个应用程序)。
性能

存储过程提供更快的代码执行和减少网络流量。

  • 更快的执行:存储过程进行解析,并为他们创造尽快优化和存储过程是存储在内存中。这意味着它会执行比从应用程序到SQL Server发送SQL多行代码快了很多。这样做需要SQL Server来编译和每次运行时优化改进你的SQL代码。
  • 减少网络流量:如果通过网络发送的SQL多行代码到你的SQL Server中,这会影响网络性能。如果你有数以百计的SQL代码行和/或你有很多活动在应用程序,这是尤其如此。运行SQL Server上的代码(作为存储过程中)消除了需要发送此代码在网络上。唯一的网络通信将提供的参数和任何查询的结果。
安全用户无需执行任何直接的语句可以执行存储过程。因此,存储过程可以谁也不能正常访问这些任务的用户提供先进的数据库功能,但这种功能是在严格控制的方式提供。

SQL Server 创建一个存储过程

我们需要使用 CREATE PROCEDURE 语句创建一个存储过程,接着要补充存储过程的代码,如果存储过程将要接受参数,它们需要被包括在名称后,如下:

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @{Parameter Name} {data type} AS
...

详细示例

下述代码创建了一个被称为 “LatestTasks” 的存储过程。

它接受一个参数名为 @Count. 当调用这个存储过程,通过 @count 参数,它决定你想要多少行返回。

代码如下:

CREATE PROCEDURE LatestTasks @Count int AS
SET ROWCOUNT @Count
SELECT TaskName AS LatestTasks, DateCreated
FROM Tasks
ORDER BY DateCreated DESC

在SQL Server管理套件运行这段代码,会看到它被在存储过程节点创建为 “LatestTasks”。

在SQL Server 2014,可以在存储过程节点/文件夹中创建通过右键单击一个存储过程,选择存储过程....这将打开一个模板,这是随时可以填入自己的具体程序。

SQL Server 执行存储过程

创建了存储过程后,要在任何时候执行它,可以执行或者调用 EXEC。如果存储过程的参数要求提供这些程序名在后面,像这样:

EXECUTE LatestTasks 
EXEC LatestTasks

EXEC LatestTasks @Count = 5

详细示例

在下面的例子中,我们在同一时间执行两次存储过程。

我们第一次调用它的时候 @Count 传递值为 3,第二次传递的值为 5。

该截图显示,通过传递参数(和值),存储过程返回结果的基础上提供值。顶端结果集返回3行,因为我们通过值3。第二个结果集返回5行,因为我们提供一个值5:

SQL Server 使用GUI

还可以使用图形用户界面来执行存储过程。

具体方法如下:

  1. 使用对象资源管理器,浏览到存储过程
  2. 右键单击该存储过程并选择 Execute Stored Procedure...:

  3. 会出现一个对话框。输入您所选择的参数值:

  4. 点击 OK
  5. SQL Server 现在会生成 SQL 代码并执行存储过程。

SQL Server 修改存储过程

如果需要修改现有的存储过程,只需更换掉 CREATE ,使用 ALTER。 

我们在 “Latest” 和 “Tasks”间添加一个空格(即“Latest Tasks”),并添加描述字段,如下:

ALTER PROCEDURE LatestTasks @Count int AS
SET ROWCOUNT @Count
SELECT TaskName AS "Latest Tasks", Description, DateCreated
FROM Tasks
ORDER BY DateCreated DESC

SQL Server 系统存储过程

SQL Server 包含了大量的系统存储过程,以帮助数据库管理任务。

通过 GUI 执行的任务可以通过系统存储过程来完成。 

例如,有些东西可以用系统存储过程的包括:

  • 配置安全帐户
  • 建立链接服务器
  • 创建一个数据库维护计划
  • 创建全文检索目录
  • 添加远程登录
  • 配置复制
  • 设置调度作业
  • 以及更多...

SQL Server 命名约定

一起来看看扩展系统存储过程节点,我们发现,他们的名字都以 sp_ 开始,这样的命名表明它是一个存储过程。

该系统存储过程显然遵循的命名约定,在存储过程制定一个一致的命名约定是好的,但是每个人的命名习惯都有不同。

有些人前缀的存储过程 usp_,另外其他人使用 SQL 关键字,如 SELECT,INSERT,UPDATE,DELETE;也有人使用的缩写是一些下划线(例如,latest_tasks)。

因此,我们的存储过程可以被命名为以下任意一种,这取决于命名约定的使用。

  • LatestTasks
  • latest_tasks
  • uspLatestTasks
  • usp_latest_tasks
  • selectLatestTasks
  • select_LatestTasks
  • select_latest_tasks
  • getLatestTasks
  • get_latest_tasks

不管选择哪一种,都要保持一致性,这样才会在需要使用存储过程时显得更加容易使用。

所以这是存储过程覆盖。

10、SQL Server服务器角色

我们登录了一个 SQL Server 数据库后,必须分配登录的一个或多个服务器角色的选项。

注意:

 

  • 服务器角色(不要与数据库角色混淆)可用来管理服务器上的权限。
  • 不是每个人都应该分配给服务器的角色,只有高级用户,如数据库管理员应指定一个服务器角色。

 

SQL Server 查看服务器角色

要查看在 SQL Server 2014 管理 Studio 服务器角色,在对象资源管理器,展开安全文件夹:

SQL Server 2014 提供了九个固定服务器角色,被授予固定服务器角色的权限,不能更改。

九层固定服务器角色的说明

下面是安装过程中在 SQL Server 2014 中定义的服务器角色的解释:

服务器角色描述
sysadmin可以在SQL Server中执行任何活动。
serveradmin可以设置服务器范围的配置选项和关闭服务器。
setupadmin可以添加和使用Transact-SQL语句删除链接的服务器。 (使用SQL Server管理套件,当系统管理员成员需要。)
securityadmin可以管理登录及其属性。他们可以GRANT, DENY和REVOKE服务器级别的权限。他们还可以GRANT, DENY和REVOKE数据库级别的权限,如果他们有机会获得一个数据库。 他们还可以重置SQL Server登录密码。
processadmin可以结束了在SQL Server实例中运行的进程。
dbcreator可以创建,修改,删除,并恢复所有数据库。
diskadmin可以管理磁盘文件。
bulkadmin可以执行BULK INSERT语句。
public每一个SQL Server登录属于公共服务器角色。当一个服务器主体没有被授予或拒绝对受保护对象的特定权限,用户继承对象授予public权限。只有当你想提供给所有用户对象上的任何对象分配公共权限。不能改变的成员在公共权限。

一些这些角色允许执行非常特定的任务。如果只有一个小团队,很可能只使用其中的一个角色(包括系统管理员)的两个。如果有一个大的团队,那么可以使用它们。

在 SQL Server 2014(和 SQL Server 2012),可以创建用户定义的服务器角色,并添加服务器级别的权限用户定义的服务器角色。

11、SQL Server 数据库模式

SQL Server 中的数据库模式可以帮助确定谁可以对数据库的对象进行访问,也可以作为命名空间,防止来自不同模式的对象名称发生冲突。

什么是数据库模式?

数据库模式是一种逻辑分组对象,如表,视图,存储过程等。

可以指定一个用户登录权限的单一模式,以便用户只能访问他们被授权访问的对象。

模式可以创建和改变在数据库中,并且用户可以被允许访问的模式; 一个模式可以被任何用户所拥有,并且架构所有权转让。

SQL Server 创建数据库模式

在 SQL Server 2014 创建数据库模式的方法如下:

  1. 从对象资源管理器,浏览到安全性和打开模式节点。
  2. 右键单击架构并选择新建模式....就像这样:

  3. 完成常规选项卡的详细信息的新模式。在这个例子中,模式名称就是维护和架构所有者的db_owner(也可以使用搜索功能找到一个所有者)。

  4. 点击权限将用户添加到架构
  5. 要添加用户,使用搜索...按钮,然后浏览...:

  6. 选择用户并单击OK:

  7. 当用户被添加,设置他们的权限。在我的例子,我授予Zoidberg用户更改,删除,插入,选择和更新权限:

  8. 通过扩展属性选项卡中添加任何扩展属性(我保留这个空白)
  9. 点击 OK.

SQL Sever 添加一个表的新模式

现在我们有一个新的模式,我们可以添加对象,如表、视图和存储过程。

例如,我们可以转移,在新的模式中创建一个或多个表。

当我们创建了一个表(称为“Tasks”),它在默认数据库模式(“dbo”)建立。

通过以下几点,将 “Tasks” 表转移到 “Maintenance” 模式:

  1. 在对象资源管理器中,请确保正在使用的数据库TaskTracker,然后用鼠标右键单击任务表并选择设计:

  2. 从设计视图,属性窗口应该出现在右侧。如果没有,按 F4 键显示属性窗口。
  3. 从属性窗口,更改架构到所需的模式:

  4. 可能会说称更改此对象的模式将导致目前所有的权限警告被丢弃。你确定要继续?点击 OK 继续。
  5. 通过右键关闭设计视图点击选项卡上的x。
  6. 当提示保存,单击"Ok"

你的表已经被转移到了 “Maintenance” 模式。

确认更改

确认更改:

  1. 刷新通过右键单击对象资源管理器上的表,然后单击刷新。
  2. 现在,您将看到对象资源管理器显示新的模式表(即Maintenance.Tasks):

12、SQL Server链接服务器

SQL Server 中存在可以链接到其他服务器的选项,一般情况下是用来与别的 SQL Server 数据库相连接,但是有时候也可以与一个Microsoft Access数据库 相连接。这样的操作是通过链接服务器节点实现的。

链接服务器节点可以连接到另一个数据库,通常/通常在不同的机器上运行,也许在不同的城市/国家。如果您需要执行分布式查询(查询远程数据库),这可能是有用的。 

设置链接服务器就是相当于使用简单的 SQL Server 管理套件,所有需要的就是查询远程服务器的详细信息,以及数据库。

SQL Server 创建链接服务器

创建链接的服务器:

  1. 在对象资源管理器,打开服务器对象,并导航到链接服务器
  2. 右键单击链接服务器,然后选择 New Linked Server...:

  3. 填写详细链接服务器的信息。 在本例,我连接到 SQL Server 称为 Parrot 的远程服务器,上面有一个为 Paywi 的 z 数据库。链接服务器名称是 PAYROLL:

  4. 根据安全性选项,必须向本地用户映射到用户在远程机器上的能力。在这里,本地 SQL Server 用户 Zoidberg 被映射到远程机器上的 Web_User 帐户。这里提供的密码必须是Web_User 帐户的远程计算机上的密码。我们也有一个本地 Windows 域身份验证的用户映射到同一个用户在远程机器上,并设置为模拟。 Windows 域身份验证的用户也是远程计算机上,因此本地用户可以简单地模拟远程用户:

  5. 并且服务器选项可让您进一步配置为链接服务器。在这里我换了一个环境。我设置 RPC 输出为 True。此选项使用户能够对运行链接服务器存储过程。需要注意的是在 RPC 选项可以存储从远程服务器到本地机器称为程序。在这种情况下,我们已经离开并且为 False:

  6. 当配置时,单击确定以创建链接的服务器。

现在应该看到新的链接服务器坐在对象资源管理器的链接服务器节点下。

分布式查询

链接服务器配置完成之后,我们就能够运行查询等操作了,但是当您运行链接服务器查询时,它会被称为分布式查询。

链接服务器的分布式查询必须包括每个数据源来查询一个完全合格的,由四部分组成的表名。

这四部分的名称的形式为:linked_server_name.catalog.schema.object_name.

如下述例子所示:

SELECT * FROM PAYROLL.Paywiz.dbo.Employees

这个例子是基于上面的链接服务器的例子。

它假定远程数据库有一个名为 “dbo” 模式和一个名为 “Employees” 的表。

 

 

 

 

 

 

 

 

 

 

更多推荐

SQL Server 入门学习