Transact-SQL充许将一堆SQL语句放在一起执行(批处理)或从系统文件中保存的SQL语句集加载进来执行。
Adaptive server有两种类型的变量,局部变量是用户定义,局部关键字表明其有一定作用域。全局变量是由AS预定义的。
变量的运用,能给SQL语句带来一定的灵活性。
1、批处理
批处理用批终结符来终止。对命令行ISQL来说,即是“go”。
1)批处理相关的规则。
批处理在编译时,不会检查对所引用对象的是否拥有权限,只在运行时才会检查。如没有相应的权限,则会给出
信息,但其它有权限的语句,仍会输出批处理结果。
批处理在编译时,会检查语句的语法,如果其中有任一语法错误,即使其它地方都没出错。还是会给出出错信息,
不执行任何操作。
2)从文件中加载批处理语句
对于ISQL来说,其语法为isql -Usa -Sfsmoshijin2 -i input.txt
-i 加 文件名 表示从文件加载批处理语句
2、流程语句
可以在批处理和存储过程中使用流控语句。常见的流控关键字如下:
1)、if ..... else ... (如果.....就.....,否则.....就.....)
if exists (select name from member where name = 'msking') //如果IF子句包含SELECT,须用括号将其包起
print 'name:msking is exist in table member'
else
print 'name msking is not exit in table member'
exist 检查后接的子查询是否有行,有则翻回true,否则返回false
注意:exit 与 exist的区别,前者为退出,后者意为存在,注意两者的拼写区别
2)、case (使用when...then语句时,定义条件表达式)
select name = fname + lname,age,
case
when age = null then 'age null'
when age !=null then 'age not null'
end
from usr
3)、begin...end 将数个语句包在begin..end之间,组成语句块,当成一起执行。
if exists (select name from member where name = 'msking')
begin
print 'this is'
print 'a test'
end
4)、waitfor
延迟一段时间才执行,或在某一个时间点时才执行
waitfor delay '1:00' //等待一个小时,再执行(时间段)
waitfor time '13:00' //在下午一点钟执行(时间点)
使用waitfor delay/waitfor time指定的时间最多为24小时
格式为:hh:mm:ss
5)注释
”斜号-星号“ 注释:/* comment */
”双连字符“ 注释:--comment
4、局部变量
声明:
declare @time smalltime //declare关键字+@+局部变量名 +局部变量的数据类型
//可一起声明多个局部变量,中间用逗号隔开,声明后的局部变量值为NULL
赋值:
select @time = value // 与执行内置函数select function_name()有点像
局部变量以@开头,后接变量标识名
局部变量只能在批处理或存储过程中定义、使用。因为它是局部的。
select @username //select 语句后跟局部变量名,可显局部变量值
5、全局变量
全局变量是系统预定义,以两个@@开头。不能直接创建全局变量,修改全局变量。如果全局变量与局部变量同名,
则系统会当做局部变量来对待。
select @@idle //select 语句后跟全局变量名,可显全局变量值
有一大堆全局变量,需要找机会使用,才能熟悉它们。