脚本基础

1、Use语句
使用Use选定数据库。

2、声明变量
1)声明变量语法:Declare @变量名 类型=初始值;
2)使用Set或Select设置变量的值。
3)系统函数见书291(主要的):@@IDENTITY、IDENT_CURRENT()、@@OPTIONS、@@REMESERVER、@@ROWCOUNT、SCOPE_IDENTITY、@@SERVERNAME、@@TRANCOUNT、@@VERSION。

批处理

1)自成一行,使用GO命令。
2)每个批处理单独发送到服务器,每个GO命令里面的语句都会单独执行,其中一个出错不会影响其他。
3)GO不是T-SQL命令。
1、批处理中的错误
1)语法错误。
2)运行时错误

2、何时使用批处理
1)要求有自己的批处理的语句
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
CREATE TRIGGER
CREATE VIEW
2)使用批处理建立优先权

sqlcmd

允许通过windows命令提示符来运行脚本,代替了旧的osql。
具体语法见书。

动态SQL:用EXEC命令动态生成代码

EXEC<{<字符变量>|’语句’})
EXEC可以换成EXECUTE。
1)EXEC的陷阱
1.1)EXEC的作用域
变量如果在外部声明,不能直接用在字符串内。
1.1.1)该规则的例外情况
系统函数可以。
1.2)安全上下文和EXEC
如果没有访问表的权限,使用EXEC查询表信息会出错
1.3)函数串联和EXEC
在EXEC里面还有函数运行的话,需要放入一个变量中,在EXEC。
1.4)EXEC和UDF
不能在自定义函数中运行EXEC。

控制流语句

1、IF……ELSE语句
语法:

IF <条件表达式>
<SQL 语句>|BEGIN <代码> END
[ELSE
<SQL 语句>|BEGIN <代码> END]
1)ELSE语句
2)将代码组合成块
用BEGIN和END将代码组合起来,建议如果使用的话,那对IF里的代码都使用。

2、CASE语句
类似于Switch。
语法:

CASE <表达式>
WHEN <匹配表达式的值> THEN <执行代码>
[…n]
[ELSE <代码>]
END

1)简单的CASE语句
根据表达式的值,选择执行那个WHEN中代码,没有匹配的值就执行ELSE中的代码。
2)搜索CASE语句
CASE后面没有表达式。
WHEN表达式判断为一个布尔值。
即使多个条件符合,也只使用第一个条件。
可以混合搭配字段
可以执行任何表达式,只要最后判断为布尔值。

3、用WHILE语句进行循环

4、WAITOR语句
使操作延迟
语法:

WAITFOR
DELAY <’时间’>| TIME <’时间’>

1)DELAY参数
指定延迟时间,不能指定天数。
2)TIME参数
指定从何时开始执行。

5、TRY/CATCH块
检查错误。
语法:

BEGIN TRY
(<SQL 语句>)
END TRY
BEGIN CATCH
{<SQL 语句>}
END CATCH [;]

错误级别和错误函数见书中的表。