一、把一个表达式的结果赋给一个变量
1、set一次只可以操作一个变量,比如:
declare @parmID int, @parmValue varchar(20)
set @parmID = 1
set @parmValue = 'aaa'
2、select允许一次操作多个变量,比如:
declare @parmID int, @parmValue varchar(20)
select @parmID = 1, @parmValue = 'aaa'
在这种情况下,SQL Server联机丛书中推荐使用set语句。
若要为变量赋值,请使用 SET 语句。这是为变量赋值的较好的方法。也可以通过 SELECT 语句的选择列表中当前所引用值为变量赋值。
若要通过使用 SET 语句为变量赋值,请包含变量名和需要赋给变量的值。这是为变量赋值的较好的方法。
二、从表中通过选择语句取值后赋给变量
1、set需要使用子查询,一次只允许操作一个变量:
use Northwind
declare @parmID int, @parmValue varchar(20)
set @parmID = (select top 1 EmployeeID from Employees)
set @parmValue = (select top 1 FirstName from Employees)
当返回空记录集时,变量被赋值为null:
use Northwind
declare @parmID int, @parmValue varchar(20)
--初始化变量
set @parmID = 1
set @parmValue = 'aaa'
--测试返回空记录集
set @parmID = (select EmployeeID from Employees where EmployeeID = 0)
set @parmValue = (select FirstName from Employees where EmployeeID = 0)
select @parmID, @parmValue
当返回多记录集时,出错:
use Northwind
declare @parmID int, @parmValue varchar(20)
set @parmID = (select EmployeeID from Employees where EmployeeID = 0)
set @parmValue = (select FirstName from Employees where EmployeeID = 0)
select @parmID, @parmValue
报错:子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
2、select是直接使用选择语句赋值,当返回空记录集时,变量保持原值
use Northwind
declare @parmID int, @parmValue varchar(20)
--初始化一个变量
set @parmID = 1
--测试返回多记录集
select @parmID = EmployeeID, @parmValue = FirstName from Employees where EmployeeID = 0
select @parmID, @parmValue
当返回多记录集时,变量的值被设置为结果集中最后一行的值
use Northwind
declare @parmID int, @parmValue varchar(20)
select top 2 @parmID = EmployeeID, @parmValue = FirstName from Employees
select @parmID, @parmValue
在这种情况下,推荐使用select语句。使用select语句后,结果集的行数可以通过@@rowcount判断,比如下面的代码,我在空结果集的时候,把变量全部设置成null值了:
use Northwind
declare @parmID int, @parmValue varchar(20)
set @parmID = 1
select @parmID = EmployeeID, @parmValue = FirstName from Employees where EmployeeID = 0
if @@rowcount =0
begin
set @parmID = null
set @parmValue = null
end
select @parmID, @parmValue