【问题标题】:Identify inserted row values to run stored procedure识别插入的行值以运行存储过程
【发布时间】:2020-12-13 06:32:35
【问题描述】:

我有一个表Table_A 和一个存储过程Calculate_BTable_A 中的数据进行一些计算并相应地更新Table_B

如何仅在Table_A 中新插入的行上运行存储过程Calculate_B 并在Table_B 中相应地插入新行

CREATE PROCEDURE Calculate_B
AS
----some sql statements-----
SELECT * FROM Table_A;

编辑1: 插入是由使用实体框架在数据库中添加数据的 Windows 应用程序制成的

【问题讨论】:

  • Table_A 中插入行从何而来?你说你在table_AUPDATE table_b 上进行了计算。 INSERT 语句在哪里?该 SQL 过程也没有告诉我们有关问题的任何信息。
  • 如前所述,您不能。您必须在插入时执行此操作。您可以使用触发器(这需要一定程度的专业知识),也可以在插入语句中使用输出子句。然后,您需要与您的过程“共享”这些行(或将该逻辑移动到插入代码中)。
  • @SMor 我一直在研究触发器,但触发器不了解如何从触发器返回插入行的主键,然后将主键作为参数传递给存储过程跨度>
  • 对于IDENTITY 值,最好在INSERT 语句中使用OUTPUT 子句,并将这些输出的行插入到表变量/临时表中。
  • 请向我们展示表格和一些示例数据。就目前而言,我们只是在猜测。

标签: sql sql-server stored-procedures triggers


【解决方案1】:

您可以在Bit 类型的表中添加另一列并将其命名为digestedFlag(或您喜欢的任何其他名称)

然后,编辑您的Calculate_B 过程并使其仅更新带有digestedFlag=0 的行。 计算完成后(或期间) - 将所有行 digestedFlag 更新为 1 (因此下次运行时不会计算它们)

【讨论】:

  • 存在行插入时如何运行存储过程?使用触发器?
  • 哦,我还以为是你打电话给Calculate_B 。在这种情况下,是的,您可以使用触发器。这是一个指南sqlservertutorial.net/sql-server-triggers
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多