首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
tsql中的set和select
所属栏目:MS SQL 2000  时间:2009-05-07 09:39  作者:狼子

一、把一个表达式的结果赋给一个变量
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
小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17