在线等 急 急 急 !!!!!!

ouyangkui 2003-06-20 01:58:31
分析下面的两段代码,解释当被删除的对象“Matti”在表中存在和不存在时的结果,并以此来说明储存过程和事物在使用上的区别。
(1) CREATE proc with_emp
AS
UPDATE employee
SET job_|v|=job_|v|+20
WHERE fname like ‘Ann’
DELETE FROM employee
WHERE fname like ‘Matti’
RETURN
GO
SELECT * FROM employee
WHERE fname=’Ann’
EXEC with_emp
SELECT * FROM employee
WHERE fname=’Ann’
GO

(2) BEGIN TRANSACTION
SELECT * FROM employee
WHERE fname=’Ann’
UPDATE employee
SET job_|v|=job_|v|-10
WHERE fname like ‘Ann’
DELETE FROM employee
WHERE fname like ‘Matti’

IF @@ROWCOUNT=0 OR @@ERROR!=0
BEGIN
ROLLBACK TRANSACTION
PRINT ‘发生错误,该操作取消’
RETURN
END
COMMIT TRANSACTION
SELECT * FROM employee
WHERE fname=’Ann’
...全文
20 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
愉快的登山者 2003-06-20
  • 打赏
  • 举报
回复
当“Matti”在表中不存在时:前者更新成功,后者更新后回滚;
使用事务,是为了解决数据库中数据的一致性问题。事务可以在过程中使用。事务和过程不是对立的。可以结合。1和2结合如:
(1) CREATE proc with_emp
AS
BEGIN TRANSACTION
UPDATE employee
SET job_|v|=job_|v|-10
WHERE fname like ‘Ann’
DELETE FROM employee
WHERE fname like ‘Matti’

IF @@ROWCOUNT=0 OR @@ERROR!=0
BEGIN
ROLLBACK TRANSACTION
PRINT ‘发生错误,该操作取消’
RETURN
END
COMMIT TRANSACTION
GO

SELECT * FROM employee
WHERE fname=’Ann’
EXEC with_emp
SELECT * FROM employee
WHERE fname=’Ann’
GO

Hahahahahaha 2003-06-20
  • 打赏
  • 举报
回复
“Matti”在表中不存在时,事务代码不会更新Ann的记录,而存储过程代码会更新。

但是不能说明这是存储过程和事务的区别,因为存储过程里可以用事务,也就是说,事物代码的效果完全可以在存储过程实现。

乱说一通

哈,哈哈,哈哈哈......

34,590

社区成员

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

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