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。具体的流程如图所示:

Created with Raphaël 2.1.2BEGINYES or NO ?Code Block IFENDCode Block ELSEyesno

举个例子:

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中引出了游标的概念,所以下一步打算先介绍游标。敬请期待~

发表评论?

9 条评论。

  1. Database-存储过程学习[1] | Dick Wu's Blog - pingback on 2016 年 06 月 20 日 在 00:35
  2. 换更简单的主题了,回归本真了 😀

  3. 就看到了手写新主题!!!!大牛啊

  4. 又发现了一个技术帝,收藏了先

  5. 哎呀呀。我来看你喽。 :mrgreen: :mrgreen: :mrgreen: :mrgreen:

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Trackbacks and Pingbacks: