存储过程与事务

SIWEILIULANG 2007-01-29 09:53:20
存储过程里的全部语句,会当作一个事务处理吗?
比如一个业务,删除某表数据,同时又增加另一个表的数据,同时可能还要有人来读数据,在过程中怎么做呢?

...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
smart_zcg 2007-01-29
  • 打赏
  • 举报
回复
不用做什么特殊的设计,像平常那样在存储过程中写你的SQL语句就好了,多用户之间的事务隔离SQL SERVER会帮你很好地解决问题的。
SIWEILIULANG 2007-01-29
  • 打赏
  • 举报
回复
表Table1中存储的是状态数据,一条记录包含一个物品的状态。
如果A用户修改某物品状态,则B不能修改和读取该物品状态,但要等待,且能知道Table1中有他需要的该物品状态,等A修改完之后,B马上修改。
该怎么做呢?
gd4134 2007-01-29
  • 打赏
  • 举报
回复
提交嵌套事务。
下面的示例创建一个表,生成三个级别的嵌套事务,然后提交该嵌套事务。尽管每个 COMMIT TRANSACTION 语句都有一个 transaction_name 参数,但是 COMMIT TRANSACTION 和 BEGIN TRANSACTION 语句之间没有任何关系。transaction_name 参数仅是帮助阅读的方法,可帮助程序员确保提交的正确号码被编码以便将 @@TRANCOUNT 减少到 0,然后提交外部事务。

CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
BEGIN TRANSACTION OuterTran -- @@TRANCOUNT set to 1.
GO
INSERT INTO TestTran VALUES (1, 'aaa')
GO
BEGIN TRANSACTION Inner1 -- @@TRANCOUNT set to 2.
GO
INSERT INTO TestTran VALUES (2, 'bbb')
GO
BEGIN TRANSACTION Inner2 -- @@TRANCOUNT set to 3.
GO
INSERT INTO TestTran VALUES (3, 'ccc')
GO
COMMIT TRANSACTION Inner2 -- Decrements @@TRANCOUNT to 2.
-- Nothing committed.
GO
COMMIT TRANSACTION Inner1 -- Decrements @@TRANCOUNT to 1.
-- Nothing committed.
GO
COMMIT TRANSACTION OuterTran -- Decrements @@TRANCOUNT to 0.
-- Commits outer transaction OuterTran.
GO

smart_zcg 2007-01-29
  • 打赏
  • 举报
回复
如果你没有用begin transaction的显式事务形式,每一句DML语句都会被当作一个事物隐式的提交
smart_zcg 2007-01-29
  • 打赏
  • 举报
回复
会的,你所说的:
表Table1中存储的是状态数据,一条记录包含一个物品的状态。
如果A用户修改某物品状态,则B不能修改和读取该物品状态,但要等待,且能知道Table1中有他需要的该物品状态,等A修改完之后,B马上修改。
——————————————————————————
SQL SERVER能帮助你完成你的工作
SIWEILIULANG 2007-01-29
  • 打赏
  • 举报
回复
我的是SQL2000
不同的事务调用相同的数据,会自动处理吗?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧