sql临时表 invalid column name ""

在功能将用户修改记录保存起来的功能时借助了触发器来实现,通过触发器将修改前的数据和修改后的数据获取到,并存入表中。

在该触发器中,我建立了临时表用来临时存储数据

 
 --判断关于deleted的临时表是否存在
	if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..##tempDel') and type='U')
	begin
	  drop table ##tempDel
	end
	
	create table ##tempDel
	(
	  id int identity(1,1),
	  serialnumber nvarchar(10),
	  typeid nvarchar(10),
	  code nvarchar(50),
	  amount decimal(18,8),
	  amount_1 decimal(18,8),
	  amount_2 decimal(18,8),
	  amount_3 decimal(18,8),
	  amount_4 decimal(18,8),
	  createuser nvarchar(20),
	  lastmod_user nvarchar(20)
	)

 如果在表table上建立触发器,那么在更新table的值时,有时会报"Invalid column name 'id' ,Invalid column name 'serialnumber' ......"

所有临时表的列都变成了无效列。

查了资料发现是跟建立的临时表有关,我建立的是##temp,也就是系统临时表,那么该系统所有的用户都可以访问,那么就可能出现用户1在完成临时表建立的操作后,用户2刚好把临时表删掉,那么就会出现"无效列"的错误。将系统临时表改为#,这个错误就没有了。

1)用户临时表:#开头;
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.
2)系统临时表: ##开头
全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.

原文地址:https://www.cnblogs.com/NoteofEveryDay/p/5329601.html