(1) 游标CURSOR
定义,赋值,打开,使用While Loop循环读取,最后关闭。
/* 声明单向游标。双向游标定义为Scroll Cursor */
DECLARE MyCursor cursor
FOR
SELECT Column1, Column2 FROM 某某表
Where 某某条件
OPEN MyCursor /* 打开游标*/
FETCH NEXT from MyCursor Into @A, @B /* 读取第行数据*/
WHILE @@FETCH_STATUS = 0 /* 用WHILE循环控制游标*/
BEGIN /*BEGIN-END 块*/
//在这里,用@A,@B做点事,或者改一改值什么的.
FETCH NEXT from MyCursor Into @A, @B /* 抓下一行*/
END
CLOSE MyCursor /* 关闭游标*/
DEALLOCATE MyCursor /* 删除游标,释放内存*/
(2) 临时表和表变量
临时表就是临时生成一个表放在Tempdb中,有两种.本地临时表,名字第一个字是"#",全局临时表"##".
本地临时表只是给当前连接使用,全局的谁都可以用.除了名字有点怪异外,使用起来临时表同普通表没有任何区别.
用完后,不要忘记Drop掉
表变量放在内存中,体积小效率高,尽量使用.用Declare创建.
declare @user table(id int,lastname varchar(50),age int)
(3) 系统变量
@@Rowcount : 变了多少行
@@error : 错误信息
(4) Case 语句,返回是一个值
有两种:
CASE 某某表达式When 某值Then 某值
When 某值Then 某值
ELSE 某值
END
就是比较某某表达式等于某值,2时,返回某值,20等等. ELSE是兜底的.
CASE WHEN 某布尔表达式THEN 某值
When 某布尔表达式THEN 某值
ELSE 某值
END
就是布尔表达式是真,返回后面的某值,20,都是假,返回ELSE后面的值. CASE后面要跟END表示结束
(5) 事务Transaction
BEGIN TRANSACTTION /*开始一个Transaction*/
IF @@ERROR <> 0
ROLLBACK TRANSACTION /*如果出错,就Rollback*/
ELSE
--Commit the transaction
COMMIT TRANSACTION /*一切正常就COMMIT*/
Transaction可以简写为Trans, 在上面三句Transaction后面都可以加个名字,常量或变量.如
BEGIN TRANSACTTION 某某交易名.
有一个变量叫@TransCount是用在嵌套交易中,算算目前到了第几层的.
(6) 触发器Trigger
Create Trigger 某某名字
ON 某某表
FOR | AFTER | INSTEAD OF 某某事件
As
做某某触发后该干的事
某某事件包括: Insert,Delete, Update
(7) 视图View
Create View 视图的名字(变量, 变量...)
As
Select 语句
那个括号里的变量,2 可以省略.
(8)Data Type 数据类型
BINARY 每个字符占一个字节任何类型的数据都可存储在这种类型的字段中。
BIT 1 个字节Yes 和No ,以及只包含这两个数值之一的字段。
TINYINT 1 个字节介于0 到255 之间的整型数。
MONEY 8 个字节符号整数。
DATETIME 8 个字节介于100 到9999 年的日期或时间数值。
UNIQUEIDENTIFIER 128 个位用于远程过程调用的唯一识别数字。
REAL 4 个字节单精度浮点数。
FLOAT 8 个字节双精度浮点数。
SMALLINT 2 个字节短整型数。
INTEGER 4 个字节长整型数。
DECIMAL 17 个字节精确的数字数据类型。。
TEXT 每一字符两字节从零到最大2,14 千兆字节。
IMAGE 视实际需要而定从零到最大2,14 千兆字节。用于OLE 对象。
CHARACTER 每一字符两字节(参见注意)长度从0 到255 个字符。
定义成TEXT也称作(MEMO)或CHAR(也称作有具体长度的TEXT(n))的字段中的字符被储存在Unicode 表示格式。Unicode字符一律需要两个字节存储每一字符。