在功能將用戶修改記錄保存起來的功能時借助了觸發器來實現,通過觸發器將修改前的數據和修改后的數據獲取到,並存入表中。
在該觸發器中,我建立了臨時表用來臨時存儲數據
--判斷關於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都消失的時候,它也自動刪除.
