sql 结束存储过程?在SQL中存储过程的一般语法是什么

seosqwseo3个月前 (09-06)测评日记38

一、SQL存储过程,如何回滚啊

当 SET XACT_ABORT为 ON时,如果执行 Transact-SQL语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT为 OFF时,有时只回滚产生错误的 Transact-SQL语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT为 OFF,也可能回滚整个事务。OFF是默认设置。

编译错误(如语法错误)不受 SET XACT_ABORT的影响。

对于大多数 OLE DB提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。有关详细信息,请参阅分布式查询和分布式事务。

SET XACT_ABORT的设置是在执行或运行时设置,而不是在分析时设置。

示例

下列代码示例导致在含有其他 Transact-SQL语句的事务中发生外键冲突错误。在第一个语句集中产生错误,但其他语句均成功执行且事务成功提交。在第二个语句集中,将 SET XACT_ABORT设置为 ON。这导致语句错误使批处理终止,并使事务回滚。

**代码

USE AdventureWorks;

GO

IF OBJECT_ID(N't2', N'U') IS NOT NULL

DROP TABLE t2;

GO

IF OBJECT_ID(N't1', N'U') IS NOT NULL

DROP TABLE t1;

GO

CREATE TABLE t1

(a INT NOT NULL PRIMARY KEY);

CREATE TABLE t2

(a INT NOT NULL REFERENCES t1(a));

GO

INSERT INTO t1 VALUES(1);

INSERT INTO t1 VALUES(3);

INSERT INTO t1 VALUES(4);

INSERT INTO t1 VALUES(6);

GO

SET XACT_ABORT OFF;

GO

BEGIN TRANSACTION;

INSERT INTO t2 VALUES(1);

INSERT INTO t2 VALUES(2);-- Foreign key error.

INSERT INTO t2 VALUES(3);

COMMIT TRANSACTION;

GO

SET XACT_ABORT ON;

GO

BEGIN TRANSACTION;

INSERT INTO t2 VALUES(4);

INSERT INTO t2 VALUES(5);-- Foreign key error.

INSERT INTO t2 VALUES(6);

COMMIT TRANSACTION;

GO

-- SELECT shows only keys 1 and 3 added.

-- Key 2 insert failed and was rolled back, but

-- XACT_ABORT was OFF and rest of transaction

-- succeeded.

-- Key 5 insert error with XACT_ABORT ON caused

-- all of the second transaction to roll back.

SELECT*

FROM t2;

GO

二、在SQL中存储过程的一般语法是什么

1、创建语法

createproc|procedurepro_name

[{@参数数据类型}[=默认值][output],

{@参数数据类型}[=默认值][output],

....

]

as

SQL_statements

2、创建不带参数存储过程

--创建存储过程

if(exists(select*fromsys.objectswherename='proc_get_student'))

dropprocproc_get_student

go

createprocproc_get_student

as

select*fromstudent;

--调用、执行存储过程

execproc_get_student;

3、修改存储过程

--修改存储过程

alterprocproc_get_student

as

select*fromstudent;

4、带参存储过程

--带参存储过程

if(object_id('proc_find_stu','P')isnotnull)

dropprocproc_find_stu

go

createprocproc_find_stu(@startIdint,@endIdint)

as

select*fromstudentwhereidbetween@startIdand@endId

go

execproc_find_stu2,4;

5、带通配符参数存储过程

--带通配符参数存储过程

if(object_id('proc_findStudentByName','P')isnotnull)

dropprocproc_findStudentByName

go

createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')

as

select*fromstudentwherenamelike@nameandnamelike@nextName;

go

execproc_findStudentByName;execproc_findStudentByName'%o%','t%';

扩展资料:

SQL存储过程优点:

1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

参考资料来源:百度百科—存储过程

三、SQL 中存储过程怎么使用

一、简单的储存过程:

1、创建一个存储过程

create procedure GetUsers()

begin

select* from user;

end;12345

2、调用存储过程

call GetUsers();12

3、删除存储过程

drop procedure if exists GetUsers;

二、带参数的存储过程

1、MySql支持 IN(传递给存储过程), OUT(从存储过程传出)和 INOUT(对存储过程传入和传出)类型的参数,存储过程的代码位于 BEGIN和 END语句内,它们是一系列 SQL语句,用来检索值,然后保存到相应的变量(通过指定INTO关键字);

2、下面的存储过程接受三个参数,分别用于获取用户表的小,平均,大分数,每个参数必须具有指定的类型,这里使用十进制值(decimal(8,2)),关键字 OUT指出相应的参数用来从存储过程传出

create procedure GetScores(

out minScore decimal(8,2),

out avgScore decimal(8,2),

out maxScore decimal(8,2)

)

begin

select min(score) into minScore from user;

select avg(score) into avgScore from user;

select max(score) into maxScore from user;

end;1234567891011

3、调用此存储过程,必须指定3个变量名(所有 MySql变量都必须以@开始),如下所示:

call GetScores(@minScore,@avgScore,@maxScore);12

4、该调用并没有任何输出,只是把调用的结果赋给了调用时传入的变量@minScore,@avgScore,@maxScore,然后即可调用显示该变量的值:

select@minScore,@avgScore,@maxScore;

5、使用 IN参数,输入一个用户 id,返回该用户的名字:

create procedure GetNameByID(

in userID int,

out userName varchar(200)

)

begin

select name from user

where id= userID

into userName;

end;12345678910

6、调用存储过程:

call GetNameByID(1,@userName);

select@userName;123

四、SQL中存储过程是干什么用的

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

扩展资料:

SQL中存储过程优点:

1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

4、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

参考资料来源:百度百科-存储过程

相关文章

小米(MI)小米电视43英寸EA43使用感受如何

小米(MI)小米电视43英寸EA43使用感受如何

很多小伙伴在关注小米(MI)小米电视43英寸EA43怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看...

海信电视ViddaR65升级款使用感受如何

海信电视ViddaR65升级款使用感受如何

很多小伙伴在关注海信电视ViddaR65升级款怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

乐视TV(Letv)超级电视好不好

乐视TV(Letv)超级电视好不好

很多小伙伴在关注乐视TV(Letv)超级电视怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

TCL电视50V8E口碑好不好

TCL电视50V8E口碑好不好

很多小伙伴在关注TCL电视50V8E怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

创维(Skyworth)创维电视70A9质量好吗

创维(Skyworth)创维电视70A9质量好吗

很多小伙伴在关注创维(Skyworth)创维电视70A9怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起...

网易有道词典笔X3s旗舰版点读笔英语学习翻译神器图文测评

网易有道词典笔X3s旗舰版点读笔英语学习翻译神器图文测评

很多小伙伴在关注网易有道词典笔X3s旗舰版点读笔英语学习翻译神器怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产...