--> Title : T-SQL入门攻略之5-T-SQL的变量与常量
--> Author : wufeng4552
--> Date : 2010-03-25
在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'