EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表
刚开始时,这个表的字段很少(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)
相关推荐
-
EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表
刚开始时,这个表的字段很少(10个以内),前开发者把这个表的所有存储过程与触发器以及表函数全是写死了.用户每添加一些字段,都需要手动去更改这些存储过程与触发器以及表函数.现在这个表的字段已经高达300个以上,有可能还会增长,因此Insus.NET的业务就是把这此静态全改写为动态处理. 然而有一个问题一直困拢至昨天,昨天是星期天本应是休息的,但是这个问题没有解决,因此这天算不上休息了. 问题就是改写表的触发器,涉及到EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表
-
全面解析JS字符串和正则表达式中的match、replace、exec等函数
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 正则表达式由于不经常使用,所以容易经常忘记,下面小编把常用的函数和功能,简明扼要的罗列在此,以备日后查看: RegExp对象的函数常用的有2个 1.test函数 用法:RegExpObject.test(string) 返回:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回
-
C++中静态成员函数访问非静态成员的实例
C++中静态成员函数访问非静态成员的实例 实现代码: #include <iostream> /* 静态成员函数只能访问静态数据成员.静态成员函数和类以外的函数和数据,不能访问非静态数据成员,但静态成员函数或静态数据成员可由任意访问许可的函数访问.原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的.但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数. */ class a { public: static void FunctionA()//静态成员函数没有隐含的
-
Android4.4新增函数访问外部存储
在Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备(secondary storage),应用程序已无法往外置存储卡(SD卡)写入数据,并且WRITE_EXTERNAL_STORAGE只为设备上的主要外部存储(primary storage)授予写权限,对于其他外部存储,其上的文件属性都改为基于文件夹结构,应用无需获取WRITE_EXTERNAL_STORAGE权限,但可以管理与自己包名相关的文件夹. 举例来说,如果应用的包名是com.example.externalst
-
JavaScript中子函数访问外部变量的3种解决方法
前言 我们在写web页面时,肯定会经常遇到下面这种情况: <body> <div class="btns-wrapper"></div> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> var wrapper = $('.btns-wrapper'); fo
-
JavaScript闭包函数访问外部变量的方法
闭包是指有权访问另一个函数作用域中的变量的函数,但作用域的配置机制有一个需要注意的地方,即闭包只能取得包含函数中任何变量的最后一个值. 如以下案例: function create(){ var arr = new Array(); for (var i=0; i<10; i++){ arr[i] = function(){ return i; }; } return arr; } var c
-
PHP中通过fopen()函数访问远程文件示例
使用PHP不仅可以让用户通过浏览器访问服务器端的文件,还可以通过HTTP或FTP等协议访问其他服务器中的文件,可以在大多数需要用文件名作为参数的函数中使用HTTP和FTP URL来代替文件名.使用fopen()函数将指定的文件名与资源绑定到一个流上,如果文件名是"scheme://-"的格式,则被当成一个URL,PHP将搜索协议处理器(也被成为封装协议)来处理此模式. 如果需要远程访问文件,必须在PHP的配置文件中激活"allow_url_fopen"选项,才能使用
-
关于C++静态成员函数访问非静态成员变量的问题
复制代码 代码如下: class a{public: static FunctionA() { menber = 1; } private: int menber;} 编译上述代码,出错.原因很简单大家都知道,静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存.静态成员函数没有隐含的this自变量.所以,它就无法访问自己类的非静态成员. 那要想访问怎么办呢?地球人都知道只要将: 复制代码 代码如下: int me
-
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
在IE与google chrome中则一切正常,很是郁闷,找了很多种调用iframe中函数的方法,问题一直没有解决.今天在google上又搜索了一下,耐心的浏览搜索结果,最后发现有人写到可以用 document.getElementById('iframeid').contentWindow.myFunc(); 这样的方式,以前没有看到过这种写法,抱着死马当活马医的心态,试了一下这段代码.奇迹发生了,药到病除.现在这种方法在前面提到的三种浏览器中都能正常的工作,在这里做下笔记,以备后用.
-
判断字段是否被更新 新旧数据写入Audit Log表中
Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy
随机推荐
- 使用母版页时内容页如何使用css和javascript
- 在Ruby中查找和执行方法
- jQuery plugin animsition使用小结
- 基于Vue实现timepicker
- js获取内联样式的方法
- 微信小程序 wx.request(OBJECT)发起请求详解
- ios用AFN进行文件上传的示例代码
- python学习 流程控制语句详解
- js删除Array数组中指定元素的两种方法
- asp.net利用HttpModule实现防sql注入
- php 中奖概率算法实现代码
- C#基于Windows服务的聊天程序(1)
- Android实现购物车功能
- 完美解决在ModalPopupExtender中使用CalendarExtender时被层遮挡的问题
- 原生js FileReader对象实现图片上传本地预览效果
- PHP请求远程地址设置超时时间的解决方法
- javascript的字符串按引用复制和传递,按值来比较介绍与应用
- vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
- SQL Server 空值处理策略[推荐]
- C语言 strftime 格式化显示日期时间的实现