日期:2014-05-18  浏览次数:20619 次

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



------解决方案--------------------
提交嵌套事务。
下面的示例创建一个表,生成三个级别的嵌套事务,然后提交该嵌套事务。尽管每个 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


------解决方案--------------------
不用做什么特殊的设计,像平常那样在存储过程中写你的SQL语句就好了,多用户之间的事务隔离SQL SERVER会帮你很好地解决问题的。
------解决方案--------------------
会的,你所说的:
表Table1中存储的是状态数据,一条记录包含一个物品的状态。
如果A用户修改某物品状态,则B不能修改和读取该物品状态,但要等待,且能知道Table1中有他需要的该物品状态,等A修改完之后,B马上修改。
——————————————————————————
SQL SERVER能帮助你完成你的工作