数据库编程_续(视图,游标)

语法:

        create view <viewName> [(<columnName1>[, <columnName2> ... ])]

                as  <subquery>

                [with check option]

  • <subquery> 查询中的某个目标列是聚合函数或表达式,可以多表连接
  • as <subquery>:子查询不可以出现,order by 子句和distinct 子句.
  • [with check option]:使用该选项,表示对视图进行更新操作(插入,删除,或修改)操作时,必须进行合法性检查,只有操作的结果满足子查询的条件表达式,更新操作才被允许

数据库管理系统在执行create view中,只是把创建视图的语句存入数据库系统表中,并不执行<subquery>的查询语句,在对视图进行查询时,才会按视图的语句从基本表中将数据查询出来(减少负载)

1.T-SQL语言简介

sql server变量分为局部变量和全局变量

常用系统的全局变量

  • @@error:当事务成果时为0,否则为最近一次的错误号
  • @@rowcount:返回受上一语句影响的行数
  • @@fetch_status:返回最近一次fetch语句执行后的游标状态
  • @@version:返回sql server 当前的安装日期,版本和处理器类型

声明变量语法:

declare <@variableName><datatype>

单个变量赋值语法:

set <@variableName>=<expr>

变量列表赋值的语法如下:

select <@variableName> [=<expr | columnName]

例如

在ScoreDB数据库中,查询Score表中的最高成绩,如果最高成绩大于95分,则显示“very good”

use ScoreDB

go

declare @score numeric

select @score = (select max(score) from Score)

if @score>95

        print 'very good'

T-sql运算符(与正常编程语言差不多,下面是我认为特殊的运算符)

  • 位运算符:~(按位非),^(按位异或)
  • 赋值语句:select(一次可给多个变量赋值)和set(一次仅能给一个变量赋值)

sql中内置了大量的函数这里就不写了具体看书(233页)

sql流程控制语句

  • begin .. end :定义语句块
  • break:退出当前层的while循环
  • case when 【else】end :多分支语句
  • continue:重新开始当前层的while循环
  • goto label:将程序流程转向到标号label处继续执行
  • if 【else】:分支语句
  • return:无条件退出
  • waitfor:为语句的执行设置1延迟
  • while:循环语句

2.游标

        游标是系统为用户开设的一个数据缓存冲区,用于存放sql语句的执行结果

使用游标必须经历5个步骤

  • 定义游标:declare
  • 打开游标:open
  • 逐行提取游标集中的行:fetch
  • 关闭游标:close
  • 释放游标:deallocate

定义游标语法:

declare <cursorName> cursor

for <sql-Statements>

[for {read only | update [of <columnName_list>]}]

  • <sql-Statements>;游标要实现的功能程序
  • [for {read only | update [of <columnName_list>]}]:read only 表示当前游标集中的元组仅可以查询,不可以修改。 【update [of <columnName_list>]},表示尽可以对当前游标集中指定的属性列,进行修改操作

打开游标:

open <curserName>

获取当前游标值

fetch <curserName> into <@ variableName_list>

执行该语句系统将当前游标所指向的元组的属性值赋给变量,然后游标自动向下移动一个元组。当游标移至尾部,不可以再读取游标,必须关闭游标然后重新打开游标。

可以通过检查全局变量@@fetch_status 来判断是否已读完游标中的所有行。

@@fetch_status的值有:

  • 0:fetch语句成功,表示已经从游标集中获取了元组值
  • -1:fetch语句失败或此行不在结果集
  • -2:被提取的行不存在

关闭游标

close <curserName>

释放游标:

deallocate <curserName>

实例看书(239页)

删除游标集中的行

delete from <tableName> where current of <curserName>

从游标中删除一行后,游标定位于被删除的游标之后的一行,必须再用fetch语句获得该行

修改游标集的当前行

updata <tableName>

set <columnName> = <expr>

where current of <curserName>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值