博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server系列:Transact-SQL变量
阅读量:6584 次
发布时间:2019-06-24

本文共 2238 字,大约阅读时间需要 7 分钟。

  变量是Transact-SQL中由用户定义、可对其赋值并参与运算的一个实体,分为全局变量和局部变量。其中全局变量由系统自定义并维护,全局变量名称前面有@@字符,任何程序均可随时调用。局部变量名称前面有一个@,由用户定义和使用。

1 局部变量

  局部变量一般出现在批处理、存储过程和触发器中,如果要使用局部变量,必须在使用前以DECLARE语句定义。局部变量仅存在于声明它的批处理、存储过程或触发器中,处理结束后,存储在局部变量中的信息将丢失。

1.1 局部变量声明

  在使用DECLARE语句来声明局部变量时,必须提供变量名称及数据类型,变量名称前面必须有一个@字符,变量名称最大长度为30个字符。声明变量时可以使用任何系统定义的数据类型或用户自定义的数据类型。

  DECLARE语法:

DECLARE { @variable_name datatype | [= value]} [,...n]

  参数:

  ◊ @variable_name:变量的名称。变量名必须以@开头。

  ◊ datatype:任何由系统提供的或用户定义的数据类型。变量数据类型不能是text、ntext或image。

  在SQL Server中,一次可以定义多个变量。

DECLARE @Name VARCHAR(50), @Age INT = 20

1.2 局部变量赋值

  变量声明后,变量值被默认设置为NULL。可以使用SET或SELECT语句为变量赋值,SET是为变量赋值的首选方法。

  语法格式:

SET @variable_name = expression
SELECT @variable_name = expression

  示例:

DECLARE @Name VARCHAR(50), @Age INTSET @Name = 'Test'SELECT @Age = 20SELECT @Name, @Age
DECLARE @TotalRecords INTSET @TotalRecords = (SELECT COUNT(1) FROM [dbo].[Product])SELECT @TotalRecords = COUNT(1) FROM [dbo].[Product]SELECT @TotalRecords

  在局部变量没有被赋值之前,其值是NULL,如果要引用,特别是在循环结构中引用,必须先为其赋值。

DECLARE @Counter INTSET @Counter = 1WHILE @Counter <= 10    BEGIN        PRINT @Counter        SET @Counter = @Counter + 1        -- SELECT @Counter = @Counter + 1    END

  在SELECT语句的WHERE字句中使用变量:

DECLARE @ProductID INTSET @ProductID = 1SELECT * FROM [dbo].[Product] WHERE [ProductID] = @ProductID

  变量可以通过选择列表中当前所引用的值赋值,如果在选择列中引用变量,变量应被赋以标量值或者SELECT语句应仅返回一行。

DECLARE @MaxQuantity INTSET @MaxQuantity = (SELECT MAX([Quantity]) FROM [dbo].[Product])SELECT @MaxQuantity
DECLARE @MaxQuantity INTSELECT @MaxQuantity = MAX([Quantity]) FROM [dbo].[Product]SELECT @MaxQuantity

  如果SELECT语句返回多行而且变量引用一个非标量表达式,则变量被赋予为结果集最后一行中表达式的返回值。

DECLARE @ProductID INTSELECT @ProductID = [ProductID] FROM [dbo].[Product]SELECT @ProductID

  测试[dbo].[Product]表中有5条记录,执行结果为:5

DECLARE @ProductIDs VARCHAR(100)SET @ProductIDs = ''SELECT @ProductIDs += CONVERT(VARCHAR,[ProductID]) + ',' FROM [dbo].[Product]SELECT @ProductIDs

  执行结果为:1,2,3,4,5,

1.3 Table类型变量

  Table类型的变量可以作为保存数据的临时表。

DECLARE @MyProduct TABLE(    ProductID INT,    ProductName VARCHAR(100));INSERT INTO @MyProduct    SELECT [ProductID], [ProductName] FROM [dbo].[Product]    WHERE [UnitPrict] >= 10;SELECT * FROM @MyProduct;

2 全局变量

  全局变量用来跟踪服务器范围和特定会话期间的信息,不能显式被赋值。全局变量不能由用户定义。

转载地址:http://krxno.baihongyu.com/

你可能感兴趣的文章
人事管理系统——考勤系统需求分析
查看>>
P2522 [HAOI2011]Problem b
查看>>
java简繁转换(区分港台)
查看>>
maven简单使用
查看>>
Python中的函数与变量
查看>>
简单描述PHP发展历程
查看>>
LICS O(n*m)+前驱路径
查看>>
一种用指针方式实现队列的方式
查看>>
关于“Return empty arrays or collections, not nulls”的思考
查看>>
18 os/os.path模块中关于文件/目录常用的函数使用方法 (转)
查看>>
尝去哪些论坛
查看>>
mysql if示例
查看>>
IP地址根据子网掩码划分子网
查看>>
LAMP环境搭建博客
查看>>
WPF自定义控件
查看>>
Activiti学习(一) 环境搭建
查看>>
尼姆博弈(二)
查看>>
angular-cli 安装
查看>>
css高斯模糊背景,使用filter!
查看>>
Js-知识小总结
查看>>