EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表

来源:asp之家 时间:2012-01-29 18:07:30 

刚开始时,这个表的字段很少(10个以内),前开发者把这个表的所有存储过程与触发器以及表函数全是写死了。用户每添加一些字段,都需要手动去更改这些存储过程与触发器以及表函数。现在这个表的字段已经高达300个以上,有可能还会增长,因此Insus.NET的业务就是把这此静态全改写为动态处理。

然而有一个问题一直困拢至昨天,昨天是星期天本应是休息的,但是这个问题没有解决,因此这天算不上休息了。

问题就是改写表的触发器,涉及到EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表,如:

代码如下:


EXECUTE('SELECT '+ @N +' = ISNULL(['+ @I +'],0) FROM inserted')



当你尝试执行上面的SQL语句,会得到一个异常提示:invalid object name 'inserted'。我们无法显示访问INSERTED或DELETED的内部临时触发表。

由于INSERTED或是DELETED表是动态驻留在内存中,而不是存储在数据库中,它不是显式的。触发器的执行是在导致触发器被触发的执行计划中。当我们使用EXEC(EXECUTE)或sp_executesql执行动态生成的SQL语句时,它却是另外一个单独的执行计划。两者之间的资源无法相互访问,再加上计划执行完毕,内存也随之释放资源了。

但是问题还是需要解决,Insus.NET想起的还是临时表。可以把INSERTED或DELETED表中的数据,首先转换入临时表了。这样子,我们就可以对临时表的数据进行处理了。
代码如下:


SELECT * INTO #inserted FROM INSERTED
SELeCT * INTO #deleted FROM DELETED 





代码如下:


DECLARE @F NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX),@I) --@I动态字段
EXECUTE ('SELECT ['+ @F +'] FROM #deleted)

标签:INSERTED,DELETED的,触发表
0
投稿

猜你喜欢

  • Windows下MySQL安全权限设置方法

    2009-07-30 08:32:00
  • 如何利用Redis作为Mybatis的二级缓存

    2023-07-05 10:51:11
  • PHP读MYSQL中文乱码的解决方法

    2024-05-11 09:18:58
  • Asp包含文件include动态包含方法(含变量)

    2010-01-14 20:12:00
  • 解决python3在anaconda下安装caffe失败的问题

    2023-01-30 03:22:43
  • 教你怎么用Python监控愉客行车程

    2021-10-22 17:59:37
  • Python中模块与包有相同名字的处理方法

    2021-11-16 07:58:34
  • Python 3.6 中使用pdfminer解析pdf文件的实现

    2023-09-02 08:34:08
  • mysql创建Bitmap_Join_Indexes中的约束与索引

    2024-01-15 18:25:50
  • Go语言omitempty选项的实现

    2024-04-25 15:12:40
  • Java游戏服务器之数据库表存取封装

    2024-01-13 13:08:17
  • python输入一个水仙花数(三位数) 输出百位十位个位实例

    2022-12-09 12:39:58
  • 基于Python实现简单的定时器详解

    2021-04-12 01:21:28
  • python读取word文档的方法

    2023-11-24 08:56:28
  • php session处理的定制

    2023-11-15 18:38:12
  • 详解SQL Server中的事务与锁问题

    2024-01-12 16:26:12
  • WEB2.0网页制作标准教程(12)XHTML校验及常见错误

    2008-02-19 19:59:00
  • python模块和函数帮助文档快速查看方法示例

    2023-03-31 00:24:04
  • 窗口没有提示自动关闭的js代码

    2024-04-16 10:42:17
  • Django用户认证系统 组与权限解析

    2022-05-06 06:10:22
  • asp之家 网络编程 m.aspxhome.com