SQL Server编程(01)流程控制

批处理

应用程序向SqlServer发送的一组命令,Sql Server会将其编译成一个可执行单元,称为执行计划,执行计划中的语句每次执行一条。

每个不同的批处理用GO命令分割。GO命令不是SQL语句,它是告诉SSMS将GO之前的语句作为批处理一起发送给数据库引擎。

注意:GO命令不能和其它SQL命令写在同一行上!局部变量的作用域限定在一个批处理中,不可以在GO后面引用,否则报错!

另外,一次提交多个批处理时,一个批处理出错,只影响其本身继续执行,而不会影响下一个批处理的执行。

语句块

T-SQL中使用BEGIN……END来指定语句块。

注意:语句块中声明的变量,其作用域是在整个批处理中,也就是说,在BEGIN……END中定义的变量,可以在END之外进行访问,直到遇见GO。

BEGIN
    declare @str nvarchar(50)
    set @str=‘abc‘
    print(@str)
END
print(@str)        --此处可以正常访问
go
print(@str)        --此处报错:必须声明标量变量 "@str"。

条件语句

IF…ELSE…语句

以下代码纯属演示:

declare @num int
set @num=3

if(@num=1)
    begin
        --这里可以写多行代码
        --如果是一行,可以省略begin...end
        print ‘num=1‘
    end
else if(@num=2)
    --此处只有一行代码,省略begin...end
    print ‘num=2‘
else
    print ‘num不等于1,也不等于2‘

case…when…then…end语句

貌似只能用在select语句中?两种用法:

第一种:

declare @num int
set @num=3
select
    case @num
        when 1 then ‘num=1‘
        when 2 then ‘num=2‘
        else ‘num不等于1,也不等于2‘
    end as col

第二种:

declare @num int
set @num=3
select
    case    --case后面不写表达式,判断表达式写在when后面
        when @num=1 then ‘num=1‘
        when @num=2 then ‘num=2‘
        else ‘num不等于1,也不等于2‘
    end as col

貌似只能用在select语句中?我试着把case…when…then…end脱离select使用,但没有成功……

循环语句

while循环

直接来一个简单的例子吧:

declare @num int
set @num=3
while(@num>0)    --括号貌似也不是必需的
    begin
        print @num
        set @num=@num-1
    end
go

使用goto语句实现循环

goto语句其实是用来跳转的,据说乱用goto会把代码变得比意大利面更乱,因此许多编程语言中的goto基本都不怎么用。

在T-SQL中,我们可以使用goto来实现循环的处理,代码如下:

declare @num int
set @num=3
lb:    --标记,名字可以自己起
print @num
if(@num>1)
begin
    set @num-=1;
    goto lb
end
时间: 2024-10-25 05:01:22

SQL Server编程(01)流程控制的相关文章

SQL SERVER中的流程控制语句

流程控制语句 是指用来控制程序执行和流程分至点额命令,一般指的是逻辑计算部分的控制. 1.Begin End语句 封装了多个T-SQL语句组合,将他们组成一个单元来处理.一般在条件查询或者循环等控制流程语句中,要查询满足特定条件的操作时会用到.Begin--end可以嵌套使用. 语法如下: begin --<sql语句或程序块> end 例子 begin --<sql语句或程序块> select * from StudentInfo update StudentInfo set m

[转]SQL Server编程:SMO介绍

转自:周公 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见,有也是一些零星的应用,特别是SSIS部分国内外的文章大都是讲解如何拖拽控件的,在开发过程中周公除了参阅SQL Server帮助文档.MSDN及StackOverFlow等网站,这些网站基本上都是英文的,为了便于一些英文不好的开发者学习,周公在自己的理解上加以整理成系列,不到之处请大家谅解

SQL Server编程系列(2):SMO常用对象的有关操作

在上一篇讲述了SMO的一些基本概念,实际上SMO体系结构远不止周公在上一篇中讲述的那么简单,下图是MSDN上给出的一个完整的结构图: 上图是一个完整的涉及到各种关系的结构图.不过它们之间的层次结构关系周公已经在上一篇做了简单概述. 在本篇中周公还是在上一篇的基础上再做稍微深入一点的介绍,在本篇中主要讲述如何获取数据库常见对象信息,并且如何利用SMO来进行一些日常操 作:如创建Login,创建数据库.备份数据库和还原数据库.执行上面这些操作的SQL语句也许我们已经写过,下面我们来看看利用SMO来操

(转) SQL Server编程系列(1):SMO介绍

最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见,有也是一些零星的应用,特别是SSIS部分国内外的文章大都是讲解如何拖拽控件的,在开发过 程中周公除了参阅SQL Server帮助文档.MSDN及StackOverFlow等网站,这些网站基本上都是英文的,为了便于一些英文不好的开发者学习,周公在自己的理解上 加以整理成系列,不到之处请大家谅解. SM

SQL Server编程系列(1):SMO介绍

原文:SQL Server编程系列(1):SMO介绍 续篇:SQL Server编程系列(2):SMO常用对象的有关操作 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见,有也是一些零星的应用,特别是SSIS部分国内外的文章大都是讲解如何拖拽控件的,在开发过程中周公除了参阅SQL Server帮助文档.MSDN及StackOverFlow等网站,这

SQL Server 编程入门

一.T—SQL 的组成 1.DML(数据操作语言 Data Manipulation Language) 查询.插入.删除和修改数据库中的数据.SELECT.INSERT.UPDATE.DELETE 等: 2.DCL(数据控制语言 Data Control Language) 用来控制存取许可.存取权限等.GRANT.REVOKE 等. 3.DDL(数据定义语言 Data Definition Language) 用来建立数据库.数据库对象和定义其列.CREATE TABLE .DROP TAB

(4.38)sql server中的事务控制及try cache错误处理

一.事务控制 BEGIN TRY BEGIN TRAN; DECLARE @aaa NVARCHAR(MAX); SET @aaa = 9 / 0; COMMIT TRAN; END TRY BEGIN CATCH --[错误]-- DECLARE @ErrorMessage NVARCHAR(MAX) , @ErrorSeverity INT , @ErrorState INT , @exception NVARCHAR(255); SELECT @ErrorMessage = ERROR_M

SQL Server编程(06)触发器

SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器.DDL触发器和登录触发器. DML触发器:执行DML语句触发执行,例如操作数据表或视图的insert.update.delete语句,不包含select. DDL触发器:执行DDL语句时触发执行,例如create table等语句. 登录触发器:在用户登录SQL Server实例创建会话时触发.

SQL Server编程必知必会 -- (58-79 点总结)

------------------------创建高级联结------------------------- 58.使用表/列别名-- 58.1. 对表使用别名SELECT cust_name,cust_contactFROM customers AS c,orders AS o,orderitems AS oiWHERE c.cust_id =o.cust_idAND oi.order_num = o.order_numAND prod_id ='TNT2' --结果:cust_name c