在功能将用户修改记录保存起来的功能时借助了触发器来实现,通过触发器将修改前的数据和修改后的数据获取到,并存入表中。
在该触发器中,我建立了临时表用来临时存储数据
--判断关于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都消失的时候,它也自动删除.