一个#号的临时表是事务级别的,就是说一个临时表只存在于一个事务里面。
1. 图1的写法 A和B属于两个不同的事务,所以会报错。而图2的写法是一个事务里面则成功执行。
2. 其他写法就是不用拼接SQL语句,直接写就行
select * into #TempProducts from [dbo].[Sys_Product];
select * from #TempProducts;
3. 一个#号的临时表是事务级别的,就是说一个临时表只存在于一个事务里面。
能提供一些关于事物的相关资料么?
我也是认为,由于exec的问题导致,A,B 2次执行不再一个事物里面
但是我有点奇怪,上面的所有语句我是放在存储过程里面的,难道存储过程里面多个语句的执行不在一个事物里面么?
@袁家小黑球: 不好意思,没找到相关的资料。你可以新建个查询,把你的代码拷贝过去,执行就是了。一个查询中的代码就是一个事务里面的(不包括拼接的sql语句)。
就像下图A能执行而B执行失败一样的。
上面的是因为执行2次SQL.而临时表一个执行完了就没了.
不用Exec,直接把SQL语句放外面,这样就在同一次sql执行了
把图一 B语句的select放在外面,不拼接,也是访问不到#TempProducts的
你多加一个#号就可以了 ##TempProducts,两个#号的表是放在tempdb里面的
##是全局性质,不想这样使用
@袁家小黑球: 那你用表变量呢,把数据放到表变量中。
declare @t1 table(t1 int)