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 语句后跟全局变量名,可显全局变量值

   
   有一大堆全局变量,需要找机会使用,才能熟悉它们。