首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

中支持一种叫做游标的对象,可以用它来处理查询返回的结果集中的各行,以指定的顺序一次只处理一行。...一般来说,如果按固定顺序一次处理一行的游标方式涉及到的数据访问要比基于集合的方式少得多,则使用游标会更加有效,前一篇提到的连续聚合就是这样的一个例子。   如何使用游标呢? ?   ...存储过程有两个输入参数和一个参数赋值部分:第一个参数需要指定包含想要运行的批处理代码地Unicode字符串,第二个参数是一个Unicode字符串,包含第一个参数中所有输入和输出参数的生命。...②sp_executesql存储过程在安全上也比EXEC要好,它的参数化也可以不必受SQL注入的困扰。...下面的示例创建了一个存储过程usp_GetCustomerOrders,它接受一个客户ID和日期范围作为输入参数,返回Orders表中由指定客户在指定日期范围内所下的订单组成的结果集,同时也将受查询影响的行为作为输出参数

9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL游标(cursor)详细说明及内部循环使用示例

    一般复杂的存储过程,都会有游标的出现,他的用处主要有: 定位到结果集中的某一行。 对当前位置的数据进行读写。 可以对结果集中的数据单独操作,而不是整行执行相同的操作。...是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。 优点 在数据库中,游标是一个十分重要的概念。...Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。...只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。...Local:作用域为局部,只在定义它的批处理,存储过程或触发器中有效。 Global:作用域为全局,由连接执行的任何存储过程或批处理中,都可以引用该游标。

    2.2K30

    SQL游标(cursor)详细说明及内部循环使用示例

    一般复杂的存储过程,都会有游标的出现,他的用处主要有: 定位到结果集中的某一行。 对当前位置的数据进行读写。 可以对结果集中的数据单独操作,而不是整行执行相同的操作。...是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。 优点 在数据库中,游标是一个十分重要的概念。...Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。...只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。...Local:作用域为局部,只在定义它的批处理,存储过程或触发器中有效。 Global:作用域为全局,由连接执行的任何存储过程或批处理中,都可以引用该游标。

    2K20

    那些年我们写过的T-SQL(下篇)

    下篇的内容很多都会在工作中用到,尤其是可编程对象,那些年我们写过的存储过程,有木有?到目前为止很多大型传统企业仍然很依赖存储过程。这部分主要难理解的部分是事务和锁机制这块,本文会进行简单的阐述。...隔离性(Isolation): 其实一种控制访问数据的机制,在T-SQL中,支持锁和行版本控制两种模式来处理隔离。...可编程对象比较多,包括变量、批、流元素、游标和临时表、用户定义函数、存储过程、触发器、动态SQL等概念,部分内容使用的场景较少,通过表格简述之,但对将对临时表这一常见并较难理解的概念进行细致介绍。...本地临时表仅对创建它的会话可见,全局临时表对所有会话可见,表变量仅对当前会话的当前批有效,粒度更小,在T-SQL它也是实际的表(易误解为只存在内存)。...那些年我们写过的T-SQL(上篇):上篇介绍查询的基础,包括基本查询的逻辑顺序、联接和子查询 那些年我们写过的T-SQL(中篇):中篇介绍表表达式、集合运算符和开窗函数 那些年我们写过的T-SQL(下篇

    2K50

    MSSQL之九 存储过程与函数

    【例9-1】创一个存储过程,以简化对sc表的数据添加工作,使得在执行该存储过程时,其参数值作为数据添加到表中。​...END块,它保存一系列T-SQL语句以创建和插入行盗临时表。临时表被在结果集中返回,并且基于函数中提到的规范创建。 ​...以上的语句执行函数。 1、批处理的用途是什么? 2、在批处理中本地变量的范围是什么? 3、存储过程如何返回值? 4、下面的哪个结构被使用,当你需要重复执行一系列T-SQL语句的时候?...6、CASE语句求一系列条件的值并且返回各种可能结果中的一个。 7、你可以在批处理中使用WHILE语句以允许一系列T-SQL语句重复执行,只要给定条件为真。...8、BREAK语句导致从WHILE循环中退出。 9、存储过程是各种T-SQL语句的集合,它被存储在一个名字下,并且作为一个单元执行。 10、存储过程可以使用CREATE PROCEDURE语句创建。

    10710

    数据库基础与SQL基础知识整理

    前面学的if else/while/变量/insert/select 等,都可以在存储过程中使用 2.优点;  执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 允许模块化程序设计 – 类似方法的复用...显示原始代码 自定义存储过程 由用户在自己的数据库中创建的存储过程usp,自己定义最好加上usp前缀      4.调用参数的存储过程        (1)无参数的存储过程调用: Exec usp_upGrade...KEYSET:指定当游标打开时,游标中行的成员身份和顺序已经固定。对行进行唯一标识的键集内置在tempdb 内一个称为 keyset 的表中。...DYNAMIC:定义一个游标,以反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。...返回紧邻当前行前面的结果行,并且当前行递减为返回行。如果FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。 FIRST:返回第一条记录。

    1.3K10

    数据库基础与SQL基础知识看这篇就够了!

    前面学的if else/while/变量/insert/select 等,都可以在存储过程中使用 2.优点;  执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 允许模块化程序设计 – 类似方法的复用...显示原始代码 自定义存储过程 由用户在自己的数据库中创建的存储过程usp,自己定义最好加上usp前缀      4.调用参数的存储过程        (1)无参数的存储过程调用: Exec usp_upGrade...KEYSET:指定当游标打开时,游标中行的成员身份和顺序已经固定。对行进行唯一标识的键集内置在tempdb 内一个称为 keyset 的表中。...DYNAMIC:定义一个游标,以反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。...返回紧邻当前行前面的结果行,并且当前行递减为返回行。如果FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。 FIRST:返回第一条记录。

    1K20

    MySQL 游标学习及使用实例

    而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。...(1)Transact_SQL 游标   Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。...Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。...如果使用API函数或T-SQL Where Current of子句通过游标进行更新,他们将立即可见。在游标外部所做的更新直到提交时才可见。...只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。

    2.2K10

    SQL视图、存储过程、触发器

    通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。...二、存储过程 (一)介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的...SHOW CREATE PROCEDURE 存储过程名称;--查询某个存储过程的定义 删除 DROP PROCEDURE [IF EXISTS] 存储过程名称 注意:在命令行中,执行创建存储过程的SQL...可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGN…END块。...,在存储过程和函数中可以使用游标对结果集进行循环的处理。

    34040

    常用存储过程语法

    前面学过了基本的存储过程,见 存储过程入门 现在学一下常用的存储过程的语法,只要花一点点时间学习下,就能用存储过程实现很复杂的功能,可以少写很多代码。...下面开始学T-SQL的语法 一.注释 — 单行注释,从这到本行结束为注释,类似C++,c#中// /* … */ 多行注释,类似C++,C#中/* … */ 二.变量(int, smallint...我们可以在存储过程中用Select语句取出每一行数据进行操作,这就需要用到游标。...If Exists (select …) update … else insert … 很常用的啦,假如数据表中存在某条记录,那么就更新该记录,否则就插入 我觉得上面的是存储过程常用的一些东东,...如果要更深入的了解,更详细的帮助,请参考SQL Server的帮助文档 本文来自 http://blog.csdn.net/zxcred –从数据表中取出第一行数据的ID,赋值给变量@id,然后打印出来

    66330

    MySQL基础-变量流程控制游标触发器

    1、触发器概念 2、触发器使用 3、触发器的优缺点 MySQL基础-变量/流程控制/游标/触发器 一、变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据...1、概念 游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构,游标让 SQL 这种面向集合的语言有了面向过程开发的能力 在 SQL 中,...游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。...,跟在应用层面实现相同的功能相比,游标可以在存储程序中使用,效率高,程序也更加简洁 但同时也会带来一些性能问题,比如在使用游标的过程中,会对数据行进行 加锁 ,这样在业务并发量大的时候,不仅会影响业务之间的效率...如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可 关闭游标: CLOSE cursor_name 注:游标会占用系统资源 ,如果不及时关闭,游标会一直保持到存储过程结束,影响系统运行的效率

    1.5K30

    进阶数据库系列(十一):PostgreSQL 存储过程

    PostgreSQL 概述 在 PostgreSQL 中,除了标准 SQL 语句之外,通过创建复杂的过程和函数来满足程序需要,我们称为存储过程和自定义函数(User-Defined Function)。...一个函数体的完整文本必须是一个块。存储过程的语法如上所示。 在一个块中的每一个声明和每一个语句都由一个分号终止。 所有的关键词都是大小写无关的。...这里通过into子句赋值给变量,返回的是结果的第一行或者null(查询返回零行),除非使用order by进行排序,否则第一行是不明确的,第一行之后所有的结果都会被丢弃。...返回一行数据,并且这个第一行的排序并不是表的第一行数据。 若是添加strict选项,结果返回的是多条数据就会报错,如下显示。...cur_emp,并且绑定了一个查询语句,通过一个参数 p_deptid 获取指定部门的员工;然后使用 OPEN 打开游标;接着在循环中使用 FETCH 语句获取游标中的记录,如果没有找到更多数据退出循环语句

    4.1K21

    MySQL 视图存储过程触发器

    视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。...# 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。...可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN ... END块。...介绍 游标(CURSOR)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进行循环的处理。...上述的存储过程,最终我们在调用的过程中,会报错,之所以报错是因为上面的while循环中,并没有退出条件。当游标的数据集获取完毕之后,再次获取数据,就会报错,从而终止了程序的执行。

    2.6K20

    MySQL 进阶之存储过程存储函数触发器

    1.9 游标 1.10 条件处理程序 2、存储函数 3、触发器 ---- 1、存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,...默认情况下,delimiter是分号; 上面给大家演示了存储过程中的基本语法,现在只是在存储过程中定义了一条简单的select 语句 ,并没有任何逻辑。...3、 局部变量 局部变量 是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。 可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN ......call Test(10000); 1.9 游标 游标(CURSOR)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进行循环的处理。...-- 关闭游标 close e_cursor; end; call Test(8000); 上面这条示例其实就是把一张表的数据查出来,再插入到另外一张表中,细心的看官应该已经发现,这个存储过程中的

    2.2K30

    那些年我们写过的T-SQL(上篇)

    集合运算符和开窗函数 那些年我们写过的T-SQL(下篇):下篇介绍数据修改、事务&并发和可编程对象 预祝大家新年快乐,万事如意!...此外关于SQL的一个非常关键的概念是,尽可能的使SQL语句进行的是整体的集合操作,而不是类似游标的循环迭代操作,这一点也是SQL优化的一个核心概念。...补充一点关系代数的知识,我们知道在关系模型中,所有操作均基于关系代数,并且操作结果是一个关系集合,但实际上我们返回的结果集还是会出现重复行的情况,不过可以通过DISTINCT关键字删除重复行。...ORDER BY字句:按序输出行,需要理解的是,在SQL中,表中没有确定的顺序,表假定为一个集合,集合是没有顺序(这个观念如果是半路出家,需要很久才能真正理会的到)。...常见排序算法中,快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

    3.2K100

    MySQL 入门常用命令大全(下)

    这里需要注意的是,在当前会话中,我们还没有手动 commit 提交事务的时候,表中的数据已经被插入了,但对于其它会话,如果事务隔离级别是 read commited,那么在 commit 之前,是查询不到新插入的记录的...(4)幻读(Phantom Read): 幻读是不可重复读的特殊情况,事务中第二次读取的结果相对第一次读取的数据产生了新增,这是因为在两次查询过程中有另外一个事务进行插入造成的。...游标的操作主要用于存储过程中用来书写过程化的 SQL,类似于 Oracle 的 PL/SQL。使用 SQL 的一般遵循的步骤如下。 (1) 声明游标,把游标与 T-SQL 语句的结果集联系起来。...,游标也随之指向了记录的第一行*/ WHILE no_more_record !...关于视图的更多信息; Create_routine_priv: 更改或放弃存储过程和函数。此权限是在 MySQL5.0 中引入; Alter_routine_priv: 修改或删除存储函数及函数。

    2.4K00
    领券