Database-存储过程学习[2]
接上一篇的坑,本篇介绍存储过程中常用的Transact-SQL语法。由于存储过程可以理解为Transact-SQL语句的集合,所以首先需要掌握Transact-SQL的基本流程。
BEGIN..END
在C/C++, Java, C#一类的语言中,程序员用{}
大括号来标记代码区块,较为古老的Pascal使用begin..end;
或者begin..end.
来标记。而在Transact-SQL中,代码区块是用BEGIN..END
来标记的。
在控制流中,区块所包含的部分作为一组语句,区块外的控制器可以将其看作一条语句。举个例子:
BEGIN --Exec insert SET @sql_mix_table_Str = 'INSERT INTO ' + @destTableName + ' SELECT * FROM ' + @sourceTableName -- Insert parameter translation, translate into sql. -- Insert statements for procedure here EXEC (@sql_mix_table_Str); END
在这段代码中,将规格化SQL语句和SQL语句作为一个区块。就类似于C/C++中大括号的作用。
IF..ELSE
说完了区块之后,分支语句IF和ELSE 的语法就更好解释了。IF..ELSE的语法要求是:
IF {Code Block} ELSE {Code Block}
IF和ELSE之后紧跟着代码区块,对这两个关键字来说,至寻找紧跟的一句控制流语句。所以,如果是多句语句,需要用代码区块BEGIN..END
。具体的流程如图所示:
举个例子:
DECLARE @compareprice money, @cost money EXECUTE Production.uspGetList '%Bikes%', 700, @compareprice OUT, @cost OUTPUT IF @cost <= @compareprice BEGIN PRINT 'These products can be purchased for less than $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.' END ELSE PRINT 'The prices for all products in this category exceed $'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.' -- from MSDN
WHILE
循环语句是控制流程的重要部分,在Transact-SQL中,只保留了While当型控制结构,这对于控制流程的开发人员来说已经足够了。
WHILE语句的控制流程如下:
WHILE 布尔表达式 { SQL语句 | 代码区块 | CONTINUE | BREAK }
WHILE与IF..ELSE相同,在表达式之后只能跟一句SQL语句。但是,还有CONTINUE和BREAK两个控制关键字。其中CONTINUE是重新进入当前循环的下一次循环,而BREAK是跳出当前循环。这与C/C++是相同的。
除了基本控制流程中的WHILE语句之外,之后还会引出游标这一个概念,在游标中使用WHILE。下一篇文章会介绍游标中使用WHILE的具体实现。
后面的任务
原来打算先看存储过程的异常处理及参数传递的,但是WHILE中引出了游标的概念,所以下一步打算先介绍游标。敬请期待~
11 thoughts on “Database-存储过程学习[2]”
换更简单的主题了,回归本真了 😀
之前的主题DOCTYPE和JS出现了冲突。而且错误原因未知。这段时间手写新主题,写成之前先靠zBench了哈哈。
都自己动手写主题了,牛!
就看到了手写新主题!!!!大牛啊
你们都看到了啥》》》》。。。
又发现了一个技术帝,收藏了先
哎呀呀。我来看你喽。

至今在用你的域名邮箱,猜猜我是谁 ❗
必须是二哥啊!
新年好啊!虽然有点迟了