EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发
近期,在MS SQL领域,我们面临着一系列挑战。项目要求我们在动态环境中处理存储过程、触发器和表函数,因为我们的程序设计允许用户根据需求动态地添加或删除表的字段。随着表字段从最初的十个增长到现在的三百个,甚至可能更多,之前的静态处理方式已经无法满足需求。Insus.NET的任务就是将这些静态的处理方式全部转为动态处理。
这两个表是动态存在于内存中的,而不是存储在数据库中,因此无法直接访问。触发器的执行是在触发它的SQL操作执行计划中进行的。当我们使用EXEC(EXECUTE)或sp_executesql执行动态生成的SQL语句时,它们会形成一个单独的执行计划,无法和触发器的执行计划共享资源。而且,当执行计划完成后,内存中的资源也会被释放。
为了解决这个问题,Insus.NET想到了使用临时表的方法。我们可以将INSERTED或DELETED表中的数据转移到临时表中,然后对临时表的数据进行处理。例如,我们可以使用如下代码将INSERTED和DELETED表中的数据转移到临时表:
```sql
SELECT INTO inserted FROM INSERTED
SELECT INTO deleted FROM DELETED
```
然后,我们可以使用动态生成的SQL语句来操作这些临时表。例如:
```sql
DECLARE @F NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX),@I) --@I动态字段
EXECUTE ('SELECT ['+ @F +'] FROM deleted')
```
通过这种方式,我们可以绕过对INSERTED和DELETED直接操作的限制,实现对动态字段的处理。虽然这不是最优雅的方式,但在当前的需求和限制下,这是一个可行的解决方案。我们将会继续更优的解决方案,以提供更好的用户体验和更高的效率。这个问题困扰了我们整个周末,但现在我们已经找到了一个解决方案,我们会继续努力,确保项目的顺利进行。
编程语言
- EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发
- Mysql的Root密码忘记,查看或修改的解决方法(图文介
- JavaScript实现动态删除列表框值的方法
- Mongodb中关于GUID的显示问题详析
- PHP7.0连接DB操作实例分析【基于mysqli】
- PHP SESSION跨页面传递失败解决方案
- asp终极防范SQL注入漏洞
- SQL Server实现显示每个类别最新更新数据的方法
- webpack+vue-cli项目中引入外部非模块格式js的方法
- 七个绝招应对网上银行盗贼
- js获取Html元素的实际宽度高度的方法
- PHP实现的多进程控制demo示例
- 利用PHP访问带有密码的Redis方法示例
- AngularJS基础 ng-src 指令简单示例
- 清空iis log 中自己登录ip的vbs
- Vue.js报错Failed to resolve filter问题的解决方法