变量是Transact-SQL中由用户定义、可对其赋值并参与运算的一个实体,可分为全局变量和局部变量两类。其中全局变量由系统自定义并维护,全局变量名称签名有@@字符,任何程序均可随时调用。局部变量名称前面有一个@,由用户定义和使用。
局部变量一般出现在批处理、存储过程和触发器中,如果要使用局部变量,必须在使用前以DECLARE语句定义。局部变量仅存在于声明它的批处理、存储过程或触发器中,处理结束后,存储在局部变量中的信息将丢失。
在使用DECLARE语句来声明局部变量时,必须提供变量名称及数据类型,变量名称前面必须有一个@字符,变量名称的最大长度为30个字符。声明变量时可以使用任何系统定义的数据类型或用户自定义的数据类型。
DECLARE语法:
DECLARE { @variable_name datatype | [= value]} [,...n]
参数:
◊ @variable_name:变量的名称。变量名必须以@开头。
◊ datatype:任何由系统提供的或用户定义的数据类型。变量数据类型不能是text、ntext或image。
在SQL Server中,一次可以定义多个变量。
DECLARE @Name VARCHAR(50), @Age INT = 20
在SQL中,可以使用SET或SELECT语句为变量赋值,其语法格式:
SET @variable_name = expression
SELECT @variable_name = expression
示例:
DECLARE @Name VARCHAR(50), @Age INT SET @Name = 'Test' SELECT @Age = 20 SELECT @Name, @Age
DECLARE @TotalRecords INT SET @TotalRecords = (SELECT COUNT(1) FROM [dbo].[Product]) SELECT @TotalRecords = COUNT(1) FROM [dbo].[Product] SELECT @TotalRecords
在局部变量没有被赋值之前,其值是NULL,如果要引用,特别是在循环结构中引用,必须先为其赋值。
DECLARE @Counter INT SET @Counter = 1 WHILE @Counter <= 10 BEGIN PRINT @Counter SET @Counter = @Counter + 1 -- SELECT @Counter = @Counter + 1 END
DECLARE @MaxQuantity INT SET @MaxQuantity = (SELECT MAX([Quantity]) FROM [dbo].[Product]) SELECT @MaxQuantity
DECLARE @MaxQuantity INT SELECT @MaxQuantity = MAX([Quantity]) FROM [dbo].[Product] SELECT @MaxQuantity
Table类型的变量可以作为保存数据的临时表。
DECLARE @MyProduct TABLE ( ProductID INT, ProductName VARCHAR(100) ); INSERT INTO @MyProduct SELECT [ProductID], [ProductName] FROM [dbo].[Product] WHERE [UnitPrict] >= 10; SELECT * FROM @MyProduct;
全局变量用来跟踪服务器范围和特定会话期间的信息,不能显式被赋值。全局变量不能由用户定义。