sqlserver事务存储过程
begin tran
。。。。。。
在存储过程后面加上:
if @@error<>0
rollback tran
else
commit tran
❷ SQLSERVER存储过程中的事物到底该怎么写
在
企业管理器里,
右键点击你的数据库,
选择
“属性”,在属性页里,
切换到
“选项”
页,
选中
“自动收缩”,
将
“模型”
改为
“简单”,
然后
“确定”。
然后,
右键点击你的数据库,
选择
“所有任务-->收缩数据库...”,在出来的窗口里,
直接点击
“确定”。
❸ sqlserver里存储过程怎么调用存储过程
sqlserver里调用存储过程的具体操作步骤如下:
1、打开SQL Server Managment管理工具,新建一个表。
❹ 在SQL中存储过程的一般语法是什么
1、 创建语法
createproc|procerepro_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%';
(4)sqlserver事务存储过程扩展阅读:
SQL存储过程优点:
1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
❺ 关于sqlserver存储过程事务锁的问题
就你上面的事例而言,select的共享锁性质是得到结果即释放,不会在事务中保留
而update所用到的U锁及其进一步的X锁则需要持续到事务的结束
如果是多线程的程序的话,在select与update处都可能会出现锁等待,这要根据实际操作中数据是否冲突来看
❻ 关于sql sever 的系统存储过程
存储过程分为三类:
系统存储过程:(System stored Procere)sp_开头,为SQLSERVER内置存储过程。
扩展存储过程:(Extended stored Procere),也就是外挂程序,用于扩展SQLSERVER的功能,以sp_或者xp_开头,以DLL的形式单独存在。
(系统存储过程和扩展存储过程都是在master数据库中。sp_开头的可是全局的,任何一个数据库都可以直接调用的。)
系统存储过程主要分为以下几类:
目录存储过程,例如:
sp_columns 返回当前环境中可查询的指定表或视图的列信息。
sp_tables 返回当前环境下可查询的对象的列表(任何可出现在 FROM 子句中的对象)。
sp_stored_proceres 返回当前环境中的存储过程列表。
复制类存储过程,例如:
sp_addarticle 创建项目并将其添加到发布中。此存储过程在发布服务器的发布数据库上执行。
安全管理类存储过程,例如:
sp_addrole 在当前数据库创建新的 Microsoft�0�3 SQL Server�6�4 角色。
sp_password 添加或更改 Microsoft�0�3 SQL Server�6�4 登录的密码。
分布式查询存储过程,例如:
sp_foreignkeys 返回引用主键的外键,这些主键在链接服务器中的表上。
sp_primarykeys 返回指定远程表的主键列,每个键列占一行。
扩展存储过程:
xp_sendmail 向指定的收件人发送邮件和查询结果集附件。
xp_startmail 启动 SQL 邮件客户端会话。
xp_cmdshell 以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行xp_cmdshell 的权限。
用户定义的存储过程:(User-defined stored Procere),这个就是用户在具体的数据库中自己定义的,名字最好不要以sp_和xp_开头,防止混乱。
注意事项:
1.在存储过程中,有些建立对象的语句是不可使用的:create default,create trigger,create procere,create view,create rule.
2.在同一数据库中,不同的所有者可以建立相同名称的对象名。例如:a.sample,b.sample,c.sample三个数据表可以同时存在。如果存储过程中未指明对象的所有者(例如存储过程中的语句select * from sample,这句中的sample没有指明所有者),在执行的过程中默认的所有者查找顺序是:相应的存储过程的建立者->相应数据库的所有者。如果这个查找过程中没有把所有者确定下来,系统就要报错。
(这里我额外插一句:如果需要严密的数据操作,在任何操作中尽量加上所有者,例如leijun.sample)
3.在存储过程名称前边添加#或者##,所建立的存储过程则是“临时存储过程“(#是局部临时存储过程,##是全局临时存储过程)。
❼ SqlServer存储过程
create
procere
prCreateSubPlan
as
begin
declare
@id
int,
@intCycle
int,
@planName
varchar(100),
@createTime
smalldatetime,
@cycleTime
int
select
@id
=
min(t_cplan_id)
from
t_cplan
while
(@id
is
not
null)
begin
select
@planName=t_plan_name,
@createTime
=
createTime,
@cycleTime
=
cycleTime
from
t_cplan
where
t_cplan_id=@id
select
@intCycle=
0
while
(@intCycle<@cycleTime)
begin
--
表t_plan
列t_plan_id是IDENTITY
列
insert
t_plan
(t_plan_name,
t_cplan_id,
createTime)
values
(@planName,
@id,
dateadd(day,
@intCycle,
@createTime))
select
@intCycle
=
@intCycle
+
1
end
select
@id
=
min(t_cplan_id)
from
t_cplan
where
t_cplan_id>@id
end
end
go
❽ sqlserver存储过程
没有表
结构
,给你写个
思路
吧。
所有的
语句
都放在一个事务中,以保证数据的
一致性
。
Begin
transaction
a
declare
@amount
decimal(15,4)
select
@amount=sum(交易金额)
as
总金额
from
表
where
mt_plan
=
'00002'
and
txn_code
in
('201',
'219')
delete
表
where
mt_plan
=
'00002'
and
txn_code
in
('201',
'219')
insert
into
表(交易金额,备注,...)
values(@amount,
‘取现利息’,...)
commit
transaction
a
请根据你的表结构做相应的修改。
❾ sql怎样新建存储过程
一:创建没有参数的存储过程:
CREATE PROCEDURE select_all
AS
BEGIN
SELECT * from T_login1
GO
二:创建带参数的存储过程:
CREATE PROCEDURE select_name
@id uniqueidentifier
AS
BEGIN
SELECT * from T_login1 where PSN0001A=@id
GO
(9)sqlserver事务存储过程扩展阅读:
创建存储过程的注意事项:
1、保持事务简短,事务越短,越不可能造成阻塞。
2、在事务中尽量避免使用循环while和游标,以及避免采用访问大量行的语句。
3、在启动事务前完成所有的计算和查询等操作,避免同一事务中交错读取和更新。可以使用表变量预先存储数据。即存储过程中查询与更新使用两个事务实现。
4、超时会让事务不执行回滚,超时后如果客户端关闭连接sqlserver自动回滚事务。如果不关闭,将造成数据丢失,而其他事务将在这个未关闭的连接上执行,造成资源锁定,甚至服务器停止响应。
❿ SQL Server的存储过程怎么写
SQL server中如何存储:
首先准备数据,测试存储过程
use ssqadm;
创建测试books表
create table books_test ( book_id int identity(1,1) primary key,
book_name varchar(20),book_price float,book_auth varchar(10));
插入测试数据
insert into books_test (book_name,book_price,book_auth)values
('论语',25.6,'孔子'),
('天龙八部',25.6,'金庸'),
('雪山飞狐',32.7,'金庸'),
('平凡的世界',35.8,'路遥'),
('史记',54.8,'司马迁');
select * from books_test;*/
创建无参存储过程
if (exists (select * from sys.objects where name = 'getAllBooks'))
drop proc getAllBooks
go
create procere getAllBooks
as
begin
select * from books_test;
调用,执行存储过程
exec getAllBooks;
end
go
修改存储过程
alter procere getallbooks
as
select book_name from books_test;
修改存储过程的名称
sp_rename getallbooks,proc_get_allbooks;
go
exec proc_get_allbooks;
go
创建带参数的存储过程
use ssqadm
go
if (exists (select * from sys.objects where name = 'searchbooks'))
drop proc searchbooks
exec searchbooks
执行存储searchbooks得到如下结果:
go
create procere searchbooks (@bookid int)--括号里面是
as
begin
declare @book_id int;定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
set @book_id = @bookid;
select* from books_test where book_id = @book_id;
end;
go
-- exec searchbooks
执行存储searchbooks得到如下结果:
创建带两个参数的存储过程
use ssqadm
go
if (exists (select * from sys.objects where name = 'book_test2'))
drop proc book_test2
exec book_test2
执行存储book_test2得到如下结果:
go
create procere book_test2
(@bookid int,@bookname varchar(20))括号里面是
as
begin
declare @book_id int;
定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
declare @book_name varchar(20);
set @book_id = @bookid;
set @book_name = @bookname;
select* from books_test where book_id =
@book_id and book_name = @book_name;
end;
go
exec book_test2
(10)sqlserver事务存储过程扩展阅读:
SQL Server中查询存储命令子句:
USE [SSQADM]
Use 是跳转到哪个数据库,对这个数据库进行操作。
GO
GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL语句。
GO是把t-sql语句分批次执行
(一步成功了才会执行下一步,即一步一个GO)
/****** Object: StoredProcere [dbo].[PROC_four_five_hr]
Script Date: 07/30/2018 13:44:55 ******/
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ON