update的过程: 首先删除旧记录:delete from tab where a=旧值 然后插入新记录:insert into tab values select ('1',b,c) from tab
第一个问题我再讲清楚点把: 表:TAB 字段:a,b,c 记录:a b c 1 a 33 语句:update tab set a=2 where c=33 这个语句在执行的时候,是不是只更新了字段a的值:set a=2 还是同时因为更新了b,c 的值:set a=2,b=a,c=33 虽然看上去字段b,c的值并没有变化,但是事实上他更新了 是不是这样??
更新应该是先删除这条记录,再插入 在触发器中可以调用 select * from deleted select * from inserted
2。可以同时调用的
首先删除旧记录:delete from tab where a=旧值
然后插入新记录:insert into tab values select ('1',b,c) from tab
表:TAB 字段:a,b,c
记录:a b c
1 a 33
语句:update tab set a=2 where c=33
这个语句在执行的时候,是不是只更新了字段a的值:set a=2
还是同时因为更新了b,c 的值:set a=2,b=a,c=33
虽然看上去字段b,c的值并没有变化,但是事实上他更新了
是不是这样??
在触发器中可以调用
select * from deleted
select * from inserted
我猜,我猜,我猜猜
create proc p_test
as
create table ##t(id int)
waitfor delay '00:05:00' --等待5分钟后继续
drop table ##t
go--然后开始一个窗口,调用存储过程
exec p_test
go--再开启一个窗口,再调用
exec p_test--你会发现很快抛出错误,临时表##t已经存在,这说明第二个窗口并没有等待第一个调用完成,而是立即调用存储过程,所以调用是并发的,而不是排队的
2.在多线程程序里面可以执行同一个存储过程~~~