SQLSERVER中变量的定义、赋值与使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQLSERVER中变量的定义、赋值与使⽤
本⽂⾯向对SQL SERVER中变量操作不熟悉的⽤户,希望能使他们在看完本⽂后能对变量操作有具体和全⾯的认识。

在学习SQL SERVER的过程中,很多时候需要对某些单独的值进⾏调试,这时就需要在SQL SERVER中对变量进⾏操作。

变量能进⾏的操作分定义、赋值、使⽤三种,下⾯以⼀段简短的代码作为⽰例:
--定义⼀个名称为@I的变量,指定其类型为整数
DECLARE@I INT
--对变量@I赋值为
SET@I=3
--输出@I的值
SELECT@I
这就是⼀个最简单的变量操作,包含上述全部三种类型。

但变量能进⾏的操作远不⽌于此,下⾯分别进⾏描述:
变量声明:
变量声明的第⼀部分为关键字DECLARE,写在最前⾯。

变量声明的第⼆部分为变量名称,必须以@开头,后⾯可以跟字母、数字、中⽂和⾮系统运算符的字符,如@、$、_等。

变量声明的第三部分为变量类型,可以定义SQL SERVER中的所有常规类型,包括各种数字类型、字符串类型、时间类型等,只有极少数特殊数据类型⽆法在变量中定义。

·变量的三个部分⽤分隔符分开,分隔符可以由多个空格、TAB制表符、换⾏符组成。

·变量名称的⼤⼩写不区分,@A和@a指向同⼀个变量,不能重复定义。

关键字和数据类型也是⼤⼩定不区分,含义相同。

·多个变量同时定义⽤逗号分隔多个变量名称和类型。

如DECLARE @A INT,@B VARCHAR(50)。

·定义的变量的⽣命周期为同⼀批次或存储过程,即:在你运⾏的同⼀批语句(也就是运⾏时选择的所有语句)或存储过程中,定义的变量都可以使⽤,变量名称必须唯⼀。

下⾯给出常⽤的变量定义写法,以下变量的声明⽅式都是合法的:
DECLARE@A INT,@B INT
--最常见的写法
SET@A=1
--如果写SET @A='XX'会报错,因为XX是字符串且⽆法隐式转换为数字
SET@A='23'
--⽤标量值函数赋值
SET@A=DBO.FUN_1(@A)
--⽤⼦查询赋值
SET@A=(SELECT MAX(number)FROM MASTER..spt_values)
--⽤其它函数赋值
SET@A=@B
--⽤表达式赋值
SET@A=@B*5+DBO.FUN_1(@A)-(SELECT MAX(number)FROM MASTER..spt_values)
变量赋值
变量的赋值有多种⽅式,最常见的⽅式是以下四种:
1. SET赋值
对单个变量赋值可以使⽤SET,基本写法如下:
SET@A='XYZ'
需要注意的地⽅有:
·SET后的变量名称必须在本批次中已定义,⼤⼩写不限。

·=号后⾯可以写数字、字符、标量值函数、返回⼀⾏⼀列的⼦查询、其它变量、表达式等,但不能写存储过程。

·=号后返回的数据类型必须与变量的数据相同,或能隐式转换成变量的数据类型
·SET后的变量名称必须在本批次中已定义,⼤⼩写不限。

下⾯给出常见的SET赋值写法:
DECLARE@A INT,@B INT
--最常见的写法
SET@A=1
--如果写SET @A='XX'会报错,因为XX是字符串且⽆法隐式转换为数字
SET@A='23'
--⽤标量值函数赋值
SET@A=DBO.FUN_1(@A)
--⽤⼦查询赋值
SET@A=(SELECT MAX(number)FROM MASTER..spt_values)
--⽤其它函数赋值
SET@A=@B
--⽤表达式赋值
SET@A=@B*5+DBO.FUN_1(@A)-(SELECT MAX(number)FROM MASTER..spt_values)
2. SELECT赋值
SELECT可以被认为是基于SET的强化赋值⽅式,以下写法与上⾯SET的基本写法完全等效:
SELECT@A='XYZ'
SELECT还可以对多个变量同时赋值:
SELECT@A='XYZ',@B='CC'
SELECT还可以⽤查询的结果集对变量赋值:
SELECT@A=NAME,@B=NAME+'X'
FROM TB_CLASS
WHERE NAME LIKE'%%'
1. 输出参数赋值
在定义存储过程时可以将传⼊的参数设定为输出参数,然后在其中为其赋值。

下⾯是⼀个简短的例⼦:CREATE PROCEDURE PROC_TEST(
@I INT OUTPUT
)
AS
SET@I=@I+1
GO
DECLARE@J INT
SET@J=5
EXEC PROC_TEST@J OUTPUT
EXEC PROC_TEST@J OUTPUT
SELECT@J
--7
需要注意的是在存储过程的定义中和执⾏存储过程的语句中,OUTPUT关键字都是必须的,不然⽆法返回参数。

1. UPDATE赋值
UPDATE⾥除了可以给列赋新值,还能给变量赋值,这⾥就涉及到⼀些底层的知识和⾼级的⽤法,这⾥不多说,只看⽰例即可:DECLARE@I INT
UPDATE TB SET COL1='A',@I=1
UPDATE TB SET COL1='B',@I=LEN(col1)WHERE COL1 LIKE'%%'
变量使⽤
变量可⽤的地⽅很多,在调试函数、存储过程、查询时都会⽤到,只要能⽤表达式的地⽅基本上都能⽤变量。

以下是⼏个典型⽤法:DECLARE@I INT
SET@I=1
--直接输出变量
SELECT@I
--使⽤变量调试函数
SELECT DBO.FUN_TEST2(@I)
--使⽤变量作为存储过程的输⼊参数
EXEC PROC_TEST@I
--查询中使⽤变量
SELECT*
FROM TB
WHERE COL1>@I
--更新中使⽤变量
UPDATE TB SET COL1=@I
WHERE COL1<>@I
以上就是变量使⽤的全部说明,希望能为读者带来帮助。

相关文档
最新文档