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都消失的時候,它也自動刪除.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM