在 T-SQL 中有两类变量,一类是全局变量,一类是局部变量。
全局变量: 是由 SQLServer 预先定义并负责维护的一类变量主要用于保存 SQLServer 系统的某些参数值和性能统计数据,使用范围覆盖整个程序,用户对其只能引用而不能定义。
局部变量: 是由用户根据需要定义的,使用范围只限于某一个批语句或者过程体内的一类变量。局部变量主要用于储存临时数据或者由存储过程返回的结果。
1 :全局变量的引用
全部变量以 @@ 开头,后面跟相应的字符串,如 @@version 查看全部变量可以用
Select 语句实现。如
select @@language -- 储存 当前语言名称
/*
繁體中文
*/
select @@dbts -- 储存 当前数据库时间 戳值
/*
0x0000000000001770
*/
select @@version -- 储存版本信息
/*
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
*/
更多信息请参考联机帮助
2 :局部变量的定义和引用
2.1 定义局部变量
局部变量由用户定义的用 declare 关键字 格式为
Declare @variable1 data_type[,@variable2 data_type2,…]
@variable1 为变量名一单个 @ 开头
data_type 为数据类型 可以是系统数据类型 也可以是用户自定义数据类型
定义单个变量
DECLARE @str VARCHAR ( 10)
同时定义多个变量
DECLARE @no_str varchar ( 8), @birthday_str smalldatetime , @avgrade_num numeric ( 3, 1);
2.2 使用 SET 对变量赋值
DECLARE @no_str varchar ( 8), @birthday_str smalldatetime , @avgrade_num numeric ( 3, 1);
SET @no_str= '20060112' ;
SET @birthday_str= '2000-2-5' ;
SET @avgrade_num = 89.8;
注:不能用一个 set 对多个变量赋值 如这样的写法是错误的
SET @no_str= '20060112' ,
@birthday_str= '2000-2-5' ,
@avgrade_num = 89.8;
2.3 使用 SELECT 对变量赋值
Select 可以同时对多个变量赋值 如:
DECLARE @no_str varchar ( 8), @birthday_str smalldatetime , @avgrade_num numeric ( 3, 1);
SELECT @no_str= '20060112' ,
@birthday_str= '2000-2-5' ,
@avgrade_num = 89.8;
注:
SELECT 是查询语句,利用该语句可以将查询的结果赋值给对应的变量如果查询的结果返回多个值,则将最后一个赋值给局部变量。
-- 定義變量
DECLARE @no_str varchar ( 8),
@birthday_str smalldatetime ,
@avgrade_num numeric ( 3, 1);
-- 賦值
SELECT @no_str = s_no,
@birthday_str = s_birthday,
@avgrade_num = s_avgrade
From student
Where s_name LIKE ' 王 %' ;
-- 顯示表信息 , 不難發現返回不止一條記錄
SELECT s_no,
s_birthday,
s_avgrade
From student
Where s_name LIKE ' 王 %' ;
-- 查看變量不難發現 select 返回多個值時候則最後一個值被賦予局部變量
SELECT @no_str as s_no,
@birthday_str as s_birthday,
@avgrade_num as s_avgrade
2.4 引用变量值
USE MyDatabase -- 打開數據庫 MyDatabase
GO
-- 定義局部變量
DECLARE @s_no varchar ( 8), @s_avgrade numeric ( 3, 1);
-- 對局部變量賦值
SET @s_no= '20060208' ;
SET @s_avgrade = 95.0;
-- 引用局部變量
UPDATE student
SET s_avgrade = @s_avgrade
Where s_no = @s_no -- 此處變量標識 @ 不能省略
3 : T-SQL 常量
常量又稱文字值或者標量值,它表示一個特定數據值的符號。其格式取決於它所表示的數據值的數據類型。可以 分為以下幾類。
3.1 字符串常量
此常量由兩個單引號來定義,是包含在兩個單引號內的字符序列。
SELECT 'CHINA'
SELECT ' 中國 '
-- 如果其中包含一個嵌入的單引號則需要在該單引號前再加一個單引號
-- 如 'abc'''
SELECT 'abc''' --abc'
注:
默認情況下是用單引號來定義字符串常量,但也可以用雙引號定義
需要將 quoted_identifier 選項設置為 off
以下均是合法的
set quoted_identifier off
select 'abc' --abc
select "abc" --abc
select 'ab''' --abc'
select "ab""c"--ab"c
set quoted_identifier on
3.2 整型常量
該常量不用單引號括起來且不包含小數點。如 :
select 2007
select - 2007
3. 3 日期常量
該常量用單引號括起來且使用特定格式的字符日期值 如:
select '200-03-25'
select 'april 15 2001'
3.4 二進制常量
該常量不用單引號括起來,但是前綴是 0x 且是 16 進制數字的字符串 如:
select 0xAE
select 0xfff
3.5 數值常量
select 123.456 --decimal 型常量
select 10.e5, 0.5e-2 --float real 常量
3. 6 位常量
位常量用數字 0 與 1 表示如果大於 1 則自動轉換成 1
3.7 貨幣常量
select $123
3.8 唯一標識常量
使用字符或者 2 進制格式指定
select 'E98E910A-68E6-47E4-AEBE-57AD84157F51'