对不起,我试图提供很多信息以避免不相关的解决方案。
我的目标是将至少 1 个 UPDATE 语句嵌入到 SELECT 语句中,这样我就有机会在 select 语句运行之前更新一些计算值(把它想象成 SELECT 上的 TRIGGER)。VIEW 没有立即解决,因为我受到我正在使用的系统的限制(见下文)。
我正在定制一个功能较弱的第 3 方商业 ERP(系统将保持无名!- 结果是您还没有听说过它,但它也不是本土开发的)。它有一个预设查询工具,我可以在其中使用文本/GUI 来构建 SELECT 查询。保存查询后,用户可以单击查询来执行它并查看结果。ERP 在 MS SQL Server 2000 上运行;版本升级现在不在卡上。我可以用我想要的任何语言在 ERP 之外编写我需要的任何功能集,如果功能允许的话,我过去曾这样做过。但是当我的自定义可以在 ERP 系统中完成时,我的用户社区发现它更容易。
查询可以任意复杂,但 ERP 包自己构建 SQL Select 语句。编译后的 ERP 内部是这样的(这只是一个猜测!):
"SELECT " + fieldList + " FROM " + tableListAndJoins + " WHERE " + whereCond
GUI builder 帮助新手用户构建 fieldList 等,但您可以绕过它并以文本形式编写子句,只要 SQL 在如上组合时有效。
我似乎找不到一个咒语来运行存储过程作为 SELECT 语句的副作用,无论它是在 select 子句、where 子句等中。我真的不在乎我如何越狱系统——一个稳定的SQL注入攻击没问题,只要它不意味着我必须修改底层sql server本身的安全性。我查看了 UDF,但您不能将 UPDATE 语句放入标量 UDF,尝试修改表 UDF 的返回没有意义(或者这样做?)。如果您可以从 VIEW 中更新,那么我想看一个示例,但我意识到我可以使用 VIEW 来计算列,这不是我正在寻找的解决方案。我在网上阅读了关于能够使用某种 XP_ 来完成此操作的暗示性声明,但至于哪个 XP_ 或如何做到这一点,我不知道。
这个问题本身不是解决方案:Updating a table within a select statement