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

刚开始时,这个表的字段很少(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)

时间: 2024-09-12 12:55:23

EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表_MsSql的相关文章

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

刚开始时,这个表的字段很少(10个以内),前开发者把这个表的所有存储过程与触发器以及表函数全是写死了.用户每添加一些字段,都需要手动去更改这些存储过程与触发器以及表函数.现在这个表的字段已经高达300个以上,有可能还会增长,因此Insus.NET的业务就是把这此静态全改写为动态处理. 然而有一个问题一直困拢至昨天,昨天是星期天本应是休息的,但是这个问题没有解决,因此这天算不上休息了. 问题就是改写表的触发器,涉及到EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表

PHP中system,exec,passthru函数用法

php提供了system(),exec(),passthru()这几个函数来调用外部的命令. 他们的区别 : system() 输出并返回最后一行shell结果. exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面. passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上. 相同点:都可以获得命令执行的状态码 ystem().exec().shell_exec() 官方文件?明如下: system - Execute an ext

Android4.4新增函数访问外部存储_Android

在Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备(secondary storage),应用程序已无法往外置存储卡(SD卡)写入数据,并且WRITE_EXTERNAL_STORAGE只为设备上的主要外部存储(primary storage)授予写权限,对于其他外部存储,其上的文件属性都改为基于文件夹结构,应用无需获取WRITE_EXTERNAL_STORAGE权限,但可以管理与自己包名相关的文件夹. 举例来说,如果应用的包名是com.example.externalst

mfc-MFC中deque的at()函数访问,诡异的问题

问题描述 MFC中deque的at()函数访问,诡异的问题 我的程序 for (int i = 0; i <EEGData3_all.size(); i++) { if (i / 200 % 5 != 0 && i / 200 % 5 != 1)//记录先验知识对应的脑电,200Hz,下位机向上位机发送数据频率 { EEGData1.push_back(EEGData1_all[i]); EEGData2.push_back(EEGData2_all[i]); EEGData3.pu

求教:js对象中的函数 访问变量的问题

问题描述 求教:js对象中的函数 访问变量的问题 name = "global"; var obj = { name:"obj", fun:function(){ alert(name); } }; obj.fun(); 结果是global,我觉得应该是obj才对,求解答 解决方案 备忘:Js函数修改及访问对象内变量.按照名称访问变量.属性.对象或影片剪辑.eval 函数关于空指针类型的类变量的成员函数访问的问题 解决方案二: fun:function(){ ale

【求助】派生类中的函数访问基类同名数据成员的问题

问题描述 /*2008年5月20日14:28:54派生类中的函数访问基类同名数据成员的问题*/usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace继承_同名覆盖问题{classProgram{classA{publicinta=10;}classB:A{newpublicinta=2;//B类的a"覆盖"了基类的apublicvoidf(){Console.WriteLine(a);//请问如何在本

全面解析JS字符串和正则表达式中的match、replace、exec等函数_javascript技巧

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 正则表达式由于不经常使用,所以容易经常忘记,下面小编把常用的函数和功能,简明扼要的罗列在此,以备日后查看: RegExp对象的函数常用的有2个 1.test函数 用法:RegExpObject.test(string) 返回:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回

Android4.4新增函数访问外部存储

在Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备(secondary storage),应用程序已无法往外置存储卡(SD卡)写入数据,并且WRITE_EXTERNAL_STORAGE只为设备上的主要外部存储(primary storage)授予写权限,对于其他外部存储,其上的文件属性都改为基于文件夹结构,应用无需获取WRITE_EXTERNAL_STORAGE权限,但可以管理与自己包名相关的文件夹. 举例来说,如果应用的包名是com.example.externalst

linux系统编程之进程(三) exec系列函数和system函数

一.exec替换进程映象 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离.这样的好处是有更多的余地对两种操作进行管理.当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行.当然,exec系列的函数也可以将当前进程替换掉. 二.exec关联函数组 包含头文件<unistd.h> 功能用exec函数可以把当前进程替换为一个新进程.exec名下是由多个关联函数组成的一个完整系列,头文件<unistd.h> 原型 in