《SQL Server 2008从入门到精通》--20180716

1.锁

当多个用户同时对同一个数据进行修改时会产生并发问题,使用事务就可以解决这个问题。但是为了防止其他用户修改另一个还没完成的事务中的数据,就需要在事务中用到锁。
SQL Server 2008提供了多种锁模式:排他锁,共享锁,更新锁,意向锁,键范围锁,架构锁和大容量更新锁。
查询sys.dm_tran_locks视图可以快速了解SQL Server 2008内的加锁情况。

SELECT * FROM sys.dm_tran_locks;

注:关于锁的知识书中没细讲,将在以后的博客中补充。

2.游标

游标是类似于C语言指针一样的结构,是一种数据访问机制,允许用户访问单独的数据行。游标主要由游标结果集和游标位置组成。游标结果集是定义游标的SELECT语句返回行的集合,游标位置是指向这个结果集中某一行的指针。
示例1:用游标检索出student表中每行记录
Student表记录如图所示
1428686-20180716184145790-91890443.png
执行下列语句

USE test
DECLARE stu_cursor CURSOR FOR
SELECT * FROM student--声明student表的游标stu
OPEN stu_cursor--打开游标
FETCH NEXT FROM stu_cursor--移动该记录指针
WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的结束信息,=0表示有记录检索成功
BEGIN
FETCH NEXT FROM stu_cursor--游标指针移动到下一条记录
END
CLOSE stu_cursor--关闭游标
DEALLOCATE stu_cursor--释放游标资源

结果如图所示
1428686-20180716184200318-519388137.png

2.1.游标定义的参数LOCAL和GLOBAL

游标定义参数LOCAL表示该游标只能作用于本次批处理或函数或存储过程。游标定义参数GLOBAL表示该游标可以作用于全局。
执行下列语句

DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
GO
OPEN stu_cursor
GO

执行结果如下
1428686-20180716184214827-1742732972.png
语句中,声明了一个student表的游标stu_cursor,在打开游标时提示游标不存在。因为该游标参数是LOCAL,只能作用于当前批处理语句中,而打开游标语句和声明语句不在一个批处理中。如果去掉第一个GO,使两个语句在同一个批处理中,就能顺利执行不会报错。
执行下列语句

DECLARE stu_cursor1 CURSOR GLOBAL
FOR SELECT * FROM student
GO
OPEN stu_cursor1
GO

执行结果:命令已成功完成
和LOCAL参数对比,GOLBAL参数设置游标作用于全局,因此OPEN和DECLARE语句不在同一个批处理中依然可以成功执行。

2.2.游标分为游标变量和游标类型

如下列语句

--语句1
DECLARE stu_cursor CURSOR
FOR SELECT * FROM student--声明student表的游标名称为stu_cursor并赋值
GO--语句2
DECLARE @stu_cursor CURSOR--声明游标类型的变量@stu_cursor
SET @stu_cursor=CURSOR FOR--给该变量赋值
SELECT * FROM student

在语句1中直接声明了一个游标并赋值,而语句2中声明了游标类型的变量@stu_cursor,然后给该变量赋值。这两者是不同的。

2.3.游标参数FORWARD_ONLY和SCROLL

FORWARD_ONLY参数设置游标只能从结果集的开始向结束方向读取,使用FETCH语句时只能用NEXT,而SCROLL参数设置游标可以从结果集的任意方向,任意位置移动。如下列语句

--语句1,默认FORWARD_ONLY
DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
GO
--语句2,FORWARD_ONLY参数,FETCH时只能从开始往结束方向
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT * FROM student
OPEN stu_cursor 
FETCH NEXT FROM stu_cursor
GO
--语句3,SCROLL参数,FETCH时可以从任意位置往任意方向
DECLARE stu_cursor CURSOR SCROLL LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH LAST FROM stu_cursor
GO

2.4.游标的简单应用

示例2:将student表中stu_enter_score大于600分的学生都减去100分
Student表中的数据如图所示
1428686-20180716184236336-732798458.png
执行下列语句

--游标的简单应用
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=600
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
GO

结果如图所示
1428686-20180716184251807-830334774.png

3.存储过程

存储过程是一组用于完成特定功能的语句集,经过编译后存储在数据库中。在SQL Server 2008中,既可以用T-SQL编写存储过程,也可以用CLR编写存储过程。

3.1.用户定义的存储过程

该种存储过程是指封装了可重用代码的模块或者历程,有2种类型:T-SQL存储过程和CLR存储过程。
T-SQL存储过程是指保存的T-SQL语句集合
CLR存储过程是指对Microsoft .NET Framework公共语言运行时(CLR)方法的引用

3.2.扩展存储过程

扩展存储过程是指可以动态加载和运行的DLL,允许使用编程语言(如C语言)创建自己的外部例程。扩展存储过程直接在SQL Server 2008的实例的地址空间中运行,可以使用SQL Server扩展存储过程API完成编程。

3.3.系统存储过程

系统存储过程是指存储在源数据库中,以sp开头的存储过程,出现在每个系统定义数据库和用户定义数据库的sys架构中。

3.3.1.创建存储过程规则

在设计和创建存储过程时,应该满足一定的约束和规则。

  • CREATE PROCEDURE定义自身可以包括任意数量和类型的SQL语句,但下表中的语句除外。不能在存储过程的任何位置使用这些语句。
  • 可以引用在统一存储过程中创建的对象,只要引用时已创建了该对象
  • 可以在存储过程内引用临时表
  • 如果在存储过程中创建了本地临时表,该临时表仅为该存储过程而存在,退出该存储过程后,该临时表会消失
  • 如果执行的存储过程调用了另一个存储过程,被调用的存储过程可以访问第一个存储过程的所有对象,包括临时表
  • 如果执行对远程SQL Server 2008实例进行更改的远程存储过程,这些更改将不能被回滚。远程存储过程不参与事务处理
  • 存储过程中的参数的最大数量为2100
  • 存储过程中的局部变量的最大数量仅受可用内存的限制
  • 根据可用内存的不同,存储过程最大可达128MB
语句语句语句
CREATE AGGREGATECREATE RULECREATE DEFAULT
CREATE SCHEMACREATE(ALTER) FUNCTIONCREATE(ALTER) TRIGGER
CREATE(ALTER) PROCEDURECREATE(ALTER) VIEWSET PARSEONLY
SET SHOWPLAN_ALLSET SHOWPLAN_TEXTSET SHOWPLAN_XML
USE database_name

3.3.2.限定存储过程内的名称

在存储过程内,如果用于语句的对象没有限定架构,则架构将默认为该存储过程的架构。如果创建该存储过程的用户没有限定INSERT,SELECT,UPDATE或DELETE语句中引用的表名或试图名,则默认情况下通过该存储过程进行的访问将受到该过程创建者权限的限制。如果有其他用户要使用存储过程,则所有用于数据定义语言(DDL)的语句(如CREATE,ALTER,EXECUTE,DROP,DBCC或动态SQL语句)的对象名应该用该对象架构的名称来限定。

3.3.3.加密存储过程的定义

如果要创建存储过程并确保其他用户无法查看该存储过程的定义,则可以使用WITH ENCRYPTION,这样,过程定义将以不可读的形式存储。

3.3.4.SET语句选项

当创建或者更改T-SQL存储过程后,数据库引擎将保存SET QUOTED_IDENTIFIER和SET ANSI_NULLS的设置,执行存储过程时将使用这些原始设置而忽略任何客户端会话的ET QUOTED_IDENTIFIER和SET ANSI_NULLS设置。其他SET选项在创建或更改存储过程后不保存。

3.4.使用存储过程

3.4.1.创建存储过程

示例3:将示例2用存储过程实现
Student表的数据如图所示
1428686-20180716184316958-1404892930.png
执行下列语句

CREATE PROCEDURE alter_data
@a int--参数
AS
BEGIN
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=@a
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
END
GO
EXEC dbo.alter_data '600'

结果如图所示
1428686-20180716184339938-2122728274.png

3.4.2.查看存储过程

可以通过使用系统存储过程或者目录视图查看存储过程的定义

3.4.2.1.图形化界面

如下图
1428686-20180716184352055-1229204512.png

3.4.2.2.系统存储过程sp_helptext查看存储过程定义

执行下列语句

EXEC sp_helptext 'alter_data'

结果如图所示
1428686-20180716184404004-278509770.png

3.4.2.3.系统存储过程sp_depends查看存储过程相关信息

执行下列语句

EXEC sp_depends 'alter_data'

结果如图所示
1428686-20180716184414751-945272354.png

3.4.2.4.目录视图查看存储过程

执行下列语句

SELECT * FROM sys.procedures

结果如图所示
1428686-20180716184427161-1213570607.png

3.4.3.修改存储过程

ALTER PROCEDURE语句修改存储过程,只需将上面示例中的CREATE修改成ALTER运行就行了。

3.4.4.删除存储过程

执行下列语句删除存储过程

DROP PROCEDURE alter_data

转载于:https://www.cnblogs.com/kukubear0/p/9319361.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

googleearthpro打开没有地球_嫦娥五号成功着陆地球!为何嫦娥五号返回时会燃烧,升空却不会?...

目前,嫦娥五号已经带着月壤成功降落到地球上,创造了中国航天的又一里程碑。嫦娥五号这一路走来,困难重重,但都被我国航天科技人员逐一克服,最终圆满地完成了嫦娥五号的月球采样返回地球任务。嫦娥五号最后这一步走得可…

语言认知偏差_我们的认知偏差正在破坏患者的结果数据

语言认知偏差How do we know if we are providing high-quality care? The answer to this question is sought by a multitude of parties: patients, clinicians, educators, legislators, and insurance companies. Unfortunately, it’s not easy to determine. There is …

android 打包相关问题记录

Android 中的打包配置在build.gradle文件中,下面对该文件的内容做一下记录。 buildscript {repositories {jcenter()}dependencies {classpath com.android.tools.build:gradle:2.2.0} } 这里生命了仓库的位置,依赖gradle的版本。 android{} android {…

本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏

本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏 第1步: 安装软件 第2步: 创建新项目 第3步: 查看代码 第4步: 加入一个精灵 第5步: 使精灵可以移动和弹跳 第6步: 继续尝试! 完整的实例 第1步: 安装软件在动手之前,先确定你已经安装了所需的软件,其中包…

C#中实现对象的深拷贝

深度拷贝指的是将一个引用类型&#xff08;包含该类型里的引用类型&#xff09;拷贝一份(在内存中完完全全是两个对象&#xff0c;没有任何引用关系)..........  直接上代码&#xff1a; 1 /// <summary>2 /// 对象的深度拷贝&#xff08;序列化的方式&#xf…

Okhttp 源码解析

HTTP及okhttp的优势 http结构 请求头 列表内容表明本次请求的客户端本次请求的cookie本次请求希望返回的数据类型本次请求是否采用数据压缩等等一系列设置 请求体 指定本次请求所使用的方法请求所使用的方法 响应头 - 服务器标识 - 状态码 - 内容编码 - cookie 返回给客…

python中定义数据结构_Python中的数据结构。

python中定义数据结构I remembered the day when I made up my mind to learn python then the very first things I learned about data types and data structures. So in this article, I would like to discuss different data structures in python.我记得当初下定决心学习…

python实训英文_GitHub - MiracleYoung/You-are-Pythonista: 汇聚【Python应用】【Python实训】【Python技术分享】等等...

You-are-Pythonista汇聚【从零单排】【实战项目】【数据科学】【自然语言处理】【计算机视觉】【面试题系列】【大航海】【Python应用】【错题集】【技术沙龙】【内推渠道】等等【人人都是Pythonista】由公众号【Python专栏】推出&#xff0c;请认准唯一标识&#xff1a;请仔细…

java电子商务系统源码 Spring MVC+mybatis+spring cloud+spring boot+spring security

鸿鹄云商大型企业分布式互联网电子商务平台&#xff0c;推出PC微信APP云服务的云商平台系统&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言&#xff1a; java、j2ee 数据库&am…

Go语言实现FastDFS分布式存储系统WebAPI网关

前言 工作需要&#xff0c;第一次使用 Go 来实战项目。 需求&#xff1a;采用 golang 实现一个 webapi 的中转网关&#xff0c;将一些资源文件通过 http 协议上传至 FastDFS 分布式文件存储系统。 一、FastDFS 与 golang 对接的代码 github&#xff1a;https://github.com/weil…

builder 模式

首先提出几个问题&#xff1a; 什么是Builder模式&#xff1f;为什么要使用Builder模式&#xff1f;它的优点是什么&#xff0c;那缺点呢&#xff1f;什么情况下使用Builder模式&#xff1f; 关于Builder模式在代码中用的很多&#xff0c;比如AlertDialog, OkHttpClient等。一…

工作失职的处理决定_工作失职的处理决定

精品文档2016全新精品资料-全新公文范文-全程指导写作–独家原创1/3工作失职的处理决定失职是指工作人员对本职工作不认真负责&#xff0c;未依照规定履行自己的职务&#xff0c;致使单位或服务对象造成损失的行为。关于工作失职的处理决定该怎么写呢?下面学习啦小编给大家带来…

venn diagram_Venn Diagram Python软件包:Vennfig

venn diagram目录 (Table of Contents) Introduction 介绍 Installation 安装 Default Functions 默认功能 Parameters 参量 Examples 例子 Conclusion 结论 介绍 (Introduction) In the last article, I showed how to draw basic Venn diagrams using matplotlib_venn.在上一…

应用程序的主入口点应用程序的主入口点应用程序的主入口点

/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(string[] args){Stream stream Assembly.GetExecutingAssembly().GetManifestResourceStream("CapApp.TestApp.exe");byte[] bs new byte[stream.Length];stream.Rea…

创梦天地通过聆讯:上半年经营利润1.3亿 腾讯持股超20%

雷帝网 雷建平 11月23日报道时隔半年后&#xff0c;乐逗游戏母公司创梦天地终于通过上市聆讯&#xff0c;这意味着创梦天地很快将在港交所上市。创梦天地联合保荐人包括瑞信、招商证券国际、中金公司。当前&#xff0c;创梦天地运营的游戏包括《梦幻花园》、《快乐点点消》、《…

PyCharm之python书写规范--消去提示波浪线

强迫症患者面对PyCharm的波浪线是很难受的&#xff0c;针对如下代码去除PyCharm中的波浪线&#xff1a; # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user "lin" A_password "lin123"for i in range(3): # 循环次数为3name input("请输入你的…

关于java static 关键字

当我们创建类时会指出哪个类的对象的外观与行为。 一般的流程是用new 创建这个类的对象&#xff0c;然后生成数据的存储空间&#xff0c;并使用相应的方法。 但以下两种情况不太适合这个流程&#xff1a; 只想用一个存储区域来保存一个特定的数据—–无论要创建多少个对象&a…

plotly django_使用Plotly为Django HTML页面进行漂亮的可视化

plotly djangoHello everyone! Recently I had to do some visualizations for my university project, I’ve done some googling and haven’t found any simple guides on how to put Plotly plots on an HTML page.大家好&#xff01; 最近&#xff0c;我不得不为我的大学项…

roce和iwarp_VIA、IB、RDMA、RoCE、iWARP、DPDK的发展与纠缠?

VIA(Virtual Interface Architecture): 这个只是一个标准&#xff0c;基本上不要了解太多。楼主的问题可以细分成2个层次考虑。一个是网络环境&#xff0c;二是具体的协议和实现。一、网络环境IB(InfiniBand): 是一种网络环境&#xff0c;做对比的是以太网, IB往往用于高性能集…

remoting

原文地址&#xff1a;http://blog.csdn.net/chengking/archive/2005/10/26/517349.aspx (一).说明 一个远程调用示例. 此示例实现功能: 客房端调用远程方法&#xff08;远程方法可以弹 出自定义信息&#xff09;&#xff0c;实现发送信息功能. 实现原理概是这样的…