zoukankan      html  css  js  c++  java
  • 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都消失的时候,它也自动删除.

  • 相关阅读:
    机器学习的数学基础
    Numpy + matplotlib + pandas 用法示例
    笔记:《ZeroMQ》
    Bash 常用快捷键
    Python网络爬虫
    Bash-Script 应用案例
    Bash-Script 语法详解
    ADB的使用
    ROS概述
    架构风格
  • 原文地址:https://www.cnblogs.com/NoteofEveryDay/p/5329601.html
Copyright © 2011-2022 走看看