SQL Server全局变量
2018年12月7日 17:28

您的SQL Server维护全局变量中的值。它们携带特定于服务器或用户会话的信息,可以从任何地方进行检查并返回一个值。了解更多信息以及全局变量如何以@@前缀开头,并且不需要声明。

全局变量

全局变量构成一种特殊类型的变量。服务器维护这些变量中的值。它们携带特定于服务器或当前用户会话的信息。无论是从存储过程还是批处理,都可以从任何地方检查它们。在SQL Server 2005文档中,Microsoft将它们称为标量函数,这意味着它们只返回一个值。既然你仍然可以在某些文档中找到对全局变量的引用,并且因为我想在本章中使用它们中的一些,我将在这里和下一章(专用于函数)中对它们进行审查。

全局变量名以@@前缀开头。您不需要声明它们,因为服务器会不断地维护它们。它们是系统定义的函数,您无法声明它们。

让我们回顾一下主要的全局变量/标量函数。

这是一个经常使用的函数/全局变量。它也是一个在Usenet新闻组中生成许多问题的功能。

每个表中的一列可以定义为Identity列,服务器将自动在其中生成唯一值。这是Microsoft SQL Server中用于生成代理键的标准技术(其值仅为数字且不携带任何信息的键)。通常,此类列将设置为分配序号:

SQL Server全局变量

@@ identity全局变量允许您获取当前会话中生成的最后一个标识值。尽快读取值很重要(也就是说,在下一个Transact-SQL语句中)。否则,您可能会启动(例如)另一个存储过程或将记录插入具有Identity列的其他表的触发器。在这种情况下,SQL Server将使用新值覆盖存储在@@ identity中的数字。在以下示例中,将插入记录并立即读取新标识符:

SQL Server全局变量

如果一个Transact-SQL语句将多个记录插入到具有Identity列的表中,则@@ identity将设置为最后一个记录中的值:

您将经常使用此功能。您将编写的最常见的存储过程类型之一将只是插入记录并将其新密钥返回给调用者。

@@ error

在每个Transact-SQL语句之后,服务器将此变量的值设置为整数值:

SQL Server全局变量

0如果声明成功

错误编号如果语句失败

此全局变量是Microsoft SQL Server环境中所有错误处理方法的基础。必须在任何其他Transact-SQL语句完成之前检查此变量的值,因为将重置@@ error的值。即使下一个语句只是一个简单的Select语句,@@ error变量的值也会在它之后改变。在以下示例中,假设在Update语句期间将发​​生错误。@@ error将仅包含错误代码,直到执行下一个语句为止; 甚至用于读取@@错误值的命令也会重置它。如果成功完成,SQL Server将@@ error设置为0.保留@@ error值的唯一方法是立即读取它并将其存储在局部变量中; 然后它可以用于错误处理。

SQL Server全局变量

如果需要在语句后立即读取多个全局变量,则所有这些变量都应包含在单个Select语句中:

47.png

只有在出现错误的情况下,@@ error变量才会被设置为错误编号,而不是在出现警告的情况下。服务器发布的有关错误或警告(即严重性,状态和错误消息)的补充信息在存储过程或批处理中不可用。只能从存储过程或批处理中访问错误号。错误消息的其他组件只能从客户端应用程序中读取。

您将在第6章的“基于@@错误的错误处理”部分中找到有关使用@@ error函数的更多详细信息。

@@ rowcount

在每个Transact-SQL语句之后,服务器将此变量的值设置为受其影响的记录总数。它可用于验证所选操作的成功:

SQL Server全局变量

注意

某些语句(如If语句)将@@ rowcount设置为0,某些语句(如Declare)不会影响它。

Rowcount_big()是SQL Server 2000中引入的函数。它以bigint数字的形式返回受影响记录的数量。

提示

当您尝试更新单个记录时,如果Where子句指定不符合任何记录的条件,则SQL Server不会报告错误。SQL Server不会更新任何内容,例如,您可能认为操作成功。您可以使用@@ rowcount来识别此类情况。

661 160

上一篇:服务器端包含(SSI)

下一篇:匿名程序

相关文章

旗下产品

软件IP代理 企业HTTP代理 开放HTTP代理 高速硬件IP代理
@ 2016 - 2024.猎鹰网安IP代理, All rights reserved. 鄂ICP备18017015号-4
禁止利用本站资源从事任何违反本国(地区)法律法规的活动
新闻中心 | 其他新闻 | 帮助文档