Transact——SQL  
一、基础概念 
 Transact-SQL就是在标准SQL的基础上进行扩充而推出的SQL Server专用的结构化SQL,引入了程序设计的思想,增强了程序的流程控制语句等。
 
 
二、变量 
全局变量:全局变量是由系统定义和维护的,用户只能使用预先说明及定义的全局变量。因此,全局变量对于用户来说是只读的。 使用全局变量时必须以@@开头。
局部变量:局部变量是由用户自定义的变量,其名称命名规则同标识符的命名规则,不区分大小写。
注释符:
 
使用
# 1. 声明(局部变量必须先声明才可以使用) declare  @var  type [, @var  type , ...]# 2. 赋值 select  @var  =  value  [, @var  =  value   , ...]set  @var  =  value # 3. 输出 print @var  # print输出是文本输出,而不是一列 
 
案例
declare  @id  char (8 )select  @id  =  '10010001' 
 
 
三、运算符 
算术运算符:+、-、*、/、%
赋值运算符:=
字符串连接运算符:"This is :" + " apple." = "This is : apple."
比较运算符:=、>、<、>=、<=、<>(不等于))    (后面为非SQL-92标准)!=、!<、!>
逻辑运算符:all and any between exists in like not or some(一系列操作数中有些值为true结果为true)
按位运算符:&、|、^
一元运算符:+、-( 正号负号)、~(取反)
 
 
四、批处理 1 go语句 
语句 
特点:一个批处理内的所有语句要么放在一起通过解析,要么没有一句能执行。
SQL Server中go语句使用注意事项:
GO 命令和 Transact-SQL 语句不能在同一行中.但在 GO 命令行中可包含注释。 
用户必须遵照使用批处理的规则.例如,在同一批处理中,创建数据库之后不能直接使用其新建的数据库。 
局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。 
每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。 
GO [count] count 为正整数.指定GO 之前的批处理执行指定的次数。 
 
语法:
statement
go
 
案例
create  database [Roc]GO use [Roc] GO 
 
 
五、流程控制语句 1 begin…end begin < statement> end # 用途:begin...end用来设定一个程序块,将在begin...end中的所有程序视为一个单元执行。 
 
2 if…else if < exp>    < statement>  [else  if < exp>  < statement>  ][else  < statement>  ]
 
3 if [not] exists if [not ] exists  (select  子查询) < statement>  [else  < statement>  ]# if exists  语句用于检测数据是否存在 
 
4 case # 用法1 : case  < exp>     when  < exp>  then  < exp>      ...     when  < exp>  then  < exp>      [ else  < exp>  ] end # 该语句是将case 后面表达式与when 子句中的表达式的值进行比较,如果相等返回then 并跳出case 。当case 中没有else 时全部失败返回null 。 # 用法2 : case     when  < exp>  then  < exp>      ...     when  < exp>  then  < exp>     [ else  < exp>  ] end # 该语句是若when 为真则返回then 并跳出case 。当case 中没有else 时全部失败返回null 。 # case 命令可以嵌套到SQL 命令中 sex=  case  ... end 
 
5 while…continue…break while < exp>  begin     < statement>      [ break ]     [ continue ]     [statement] end 
 
6 waitfor 7 goto # 相当于jmp,先设定标识符,再jmp至标识符处 goto 标识符 
 
8 return 
return ([整数值])
RETURN语句用于无条件地终止一个查询、存储过程或者批处理,此时位于RETURN语句之后的程序将不会被执行。
return 不指定返回 0
return 不能返回null
return语句返回值
 
 
六、常用命令 1 backup 
用处:备份。
 
2 restore 
用处:备份。
 
3 checkpoint 
用处:将当前工作的数据库中被更改过的数据页或日志页从数据缓冲区中强制写入硬盘。
用法:checkpoint [ checkpoint_duration ]
参数为int且必须大于0,单位为秒,表示SQL Server数据库引擎会在请求的持续时间内尝试执行检查点。
省略则SQL Server数据库引擎会自动调整检查点时间。
 
4 DBCC 
用处:验证数据库完整性,查找错误,分析系统使用等等。
 
dbcc 子命令 decc help ( '?'  ) # 可以查询DBCC使用的所有命令。 dbcc help ( '子命令'  ) # 可以查指定命令的用法。 
 
5 declare 
用处:声明局部变量,游标变量,表变量。
定义表 
 
declare  {{ @ lcoal_variable data_type }|  { @ cursor_variable_name CURSOR  }|  { table_type_definition }} [ , ... n ] # 不能声明 text,ntext,image类型。 # 表定义: declare  @order  table (ID int ,Name varchar (20 ))declare  @Detail  table (ID int ,Price float )insert  into  @order (ID,Name) values (1 ,'aa' ),(2 ,'bb' ),(3 ,'cc' )insert  into  @Detail (ID,Price) values (1 ,10.5 ),(2 ,12.3 ),(4 ,5.9 )select  *  from  @order select  *  from  @Detail 
 
6 execute 
execute 或 exec 执行存储过程。
 
7 kill 
kill 命令用于终止某一过程的执行。
 
8 print print 'any ASCII text'  |  @ local_variable |  @@ FUNCTION  |  string_expression # print可以用 ' + '  拼接多个变量输出在同一行。 print @x  +  @y   
 
9 raiserror 
用于在SQL Server系统返回错误信息时返回用户指定信息。
 
10 select 
用于变量赋值。
 
select { @local_variable = expression } [ , ... n ]
11 set # 1 、局部变量赋值 set  { { @local_variable  =  expression } |  { @cursor_variable  =             { @cursor_variable1  cursor_name                    |  { cursor                     [ forward_only |  scroll  ]                    [ static  |  keyset |  dynamic  |  optimistic ]                    [ read_only |  scroll_lcoks |  optimistic ]                    [ type_warning ]                    for  select_statement                    [ for  { read only                     |  update  [ of  column_name [ , ... n ] } ]             }}}} # 2 、用于用户执行SQL 命令时,SQL  Server处理选项的设定。 SET :ON SET :OFFSET :选项值
 
12 shutdown 
停止SQL Server执行。
shutdown [ with nowait ]
带参数:立刻停止SQL Server,终止所有的用户过程并对每一个现行的事务发生一个回滚后退出SQL Server。
不带参数:
阻止任何用户登入SQL Server。 
等待尚未完成的Transact-SQL命令或存储过程执行完毕。 
在每个数据库中执行checkpoint命令。 
停止SQL Server执行。 
 
 
13 use 
用处:切换使用数据库。(需要有权限)
use { database }
 
 
七、常用函数 1 统计 stdev(exp) stdevp(exp) var(exp) varp(exp) 
 
2 算术 ?redirectedfrom=MSDN) 3 字符串 # 字符串转换 ascii( character_expression ) char ( integer_expression )lower  ( integer_expression )upper  ( integer_expression )str( float   _expression [ , length [ , <  decimal  > ]] ) # 去空格函数 ltrim ( character_expression ) rtrim ( character_expression ) # 取子串函数 left  ( character_expression , integer_expression )right  ( character_expression , integer_expression )substring  ( expression , starting_position , length )# 字符串比较函数(两者区别:patindex子串中可以使用通配符,可以用于char 、varchar 、text数据类型) charindex ( substring_expression , expression ) patindex ( ' %substring_expression% '   , expression ) # 字符串操作函数 quotename ( character_expression , [ , quote_ character  ] ) replicate ( character_expression , integer_expression ) reverse ( character_expression) replace ( string_expression1 ,string_expression2 , string_expression3 ) space( integer_expression ) stuff( character_expression1 , start_position , length , character_expression2 ) 
 
4 数据类型转化 
convert:时间转化 
 
cast  ( <  expression >  as  <  data_type >  [ length ])
 
5 日期    链接  day  ( <  data_expression >  )month  ( <  data_expression >  )year  ( <  data_expression >  )dateadd ( <  datepart >  , <  number >  , <  date  >  ) datediff ( <  datepart >  , <  date1 >  , <  date2 >  ) datename ( <  datepart >  , <  date  >  ) datepart ( <  datepart >  , <  date  >  ) getdate() 
 
6 自定义 
自定义函数 
 
create  function  function_name( [ { @parameter_name  [ as  ] parameter_data_type  [ =  default  ] [ readonly ] [ , ... n ] ] ) returns  return_data_type[ with  encryption ] [ as  ] begin function_body return  scalar_expressionend  
 
 
八、存储过程 1 定义 2 创建 create  procedure  procedure_name [ ; number ]     [ ( @parameter  data_type } [ varying  ] [ =  default  ] [ output ]            ] { , ... n } [ with      { recompile |  encryption |  recompile , encryption } ]   [ for  replication ]    as  sql_statement [ , ... n ]
 
3 查看 
exec sp_helptext procedure_name
 
4 重命名 
右键。
 
5 删除 
drop procedure procedure_name
 
6 执行 
exec procedure procedure_name
 
7 修改 
其他同理create。
alter procedure procedure_name
 
8 特殊存储过程 
sp_executesql:可以执行sql语句
exec sp_executesql @sql , @para , [ @para1 = @para1 , ... ](SQL语句,SQL语句参数,参数值等于)
 
 
九、触发器 1 定义 2 创建 创建DML触发器
# 数据触发器 create  trigger  trigger_name ON  table_name[with  encryption]   for  |  after |  instead of [ delete  |  update  |  insert  ]  as  sql_statement [ ; ]# rollback  transaction 回退数据库 
 
创建DDL触发器
# 结构触发器 create  trigger  trigger_nameon  { all  server |  database }[ with  encryption ] { for  |  after } { event_type |  event_group } [ , ... n ] as  sql_statement [ ; ]
 
3 查看 exec  sp_helptrigger ' table '  [ , 'type'  ]exec  sp_helptext 'trigger_name' 
 
4 修改 
同理create。
alter trigger trigger_name
 
5 使有效 disable |  enable trigger  { [ schema . ] trigger_name [ , ... n ] |  all  } on  object_name
 
6 删除 
drop trigger trigger_name
 
 
十、备份和还原 1 定义 2 创建备份 3 还原数据库