sql server临时表有两种,本地临时表和全局临时表,本地临时表用#来表示,如#test,本地临时表在创建后会改变名称,会在原有的#test名字基础上加上一些字符数字,如果在存储过程里,创建#test后,在查询#test,就会报错找不到这个表。
全局临时表用##来表示,如##test2,全局临时表创建后名字不会改变,使用##test2就可以查询到。
在使用临时表时,经常会用到select * into ##test2这样的语句,select into语句会自动创建临时表##test2,并把查询到的数据写入##test2中。
问题,当多次使用select into,想往同一个临时表里插入数据的时候就会报错,提示##test2已经存在,这是因为在你第二次使用select into时,它还会去创建##test2,但##test2在第一次已经创建了,所以就有问题。
可以通过insert into语句来解决。
第一次时,可以用select * into ##test2来创建临时表,后面用insert into ##test2 select *来继续插入数据,insert into不会去创建表。