非常抱歉内容有些长,我试图提供尽可能多的信息以避免无关的解决方案。
我的目标是将至少1个UPDATE语句嵌入到SELECT语句中,这样我就有机会在执行SELECT语句之前更新一些计算值(类似于SELECT触发器)。VIEW并不是我立即需要的解决方案,因为我受限于我正在使用的系统(请参见以下内容)。
我正在定制一个第三方商业ERP,该系统功能较弱(系统名称不便透露!--总之您没有听说过它,但它也不是自制的)。它具有一个预制查询功能,我可以使用文本/GUI来构建SELECT查询。保存查询后,用户可以单击查询以执行它并查看结果。ERP运行在MS SQL Server 2000上;目前没有升级版本的计划。我可以在ERP外部使用任何语言编写所需的功能集,我以前已经这样做过,如果需要的话。但我的用户群体发现当我的定制可以在ERP系统中完成时更加容易。
查询可以是任意复杂的,但ERP软件包会自己构建SQL Select语句。编译后的ERP内部可能有类似于以下内容的东西(这只是猜测!):
"SELECT " + fieldList + " FROM " + tableListAndJoins + " WHERE " + whereCond
GUI构建器可以帮助新手用户构建fieldList等内容,但只要SQL在合并时有效,您可以绕过它并以文本编写子句。
我似乎找不到运行存储过程的咒语作为SELECT语句的副作用,无论是在选择子句中还是在where子句中等。我真的不关心如何越狱系统--稳定的SQL注入攻击就可以了,只要它不意味着我必须修改基础SQL服务器的安全性。我看过UDF,但您不能将UPDATE语句放入标量UDF中,并且尝试修改表UDF的返回值是没有意义的(或者有吗?)。如果您可以从VIEW中进行UPDATE,那么我想看一个示例,但我意识到我可以使用VIEW来计算列,而这不是我要寻找的解决方案。我在网上读到了一个暗示性声明,称可以使用某种XP_来实现此目的,但是哪个XP_或如何做到这一点,我不知道。
这个问题本身不是一个解决方案:Updating a table within a select statement。