【问题标题】:how to use last inserted record id to multiple tables如何将最后插入的记录ID用于多个表
【发布时间】:2019-02-27 04:13:34
【问题描述】:

我有 3 个表,Merchant_Master、Merchant_PaymentDetail 和 Merchant_refference 主表是这样的,id是自动增量

  +----+------+------------+----------------+
  | id | mid  | acquirerID |   merchantName |
  +----+------+------------+----------------+
  |  1 | 2345 |          3 |  store 1       |
  +----+------+------------+----------------+

Merchant_PaymentDetail 长这样,第一列是 AutoIncrement

   +----+-----+--------+-------------+
   | id | mid | BankID |   AccountNo |
   +----+-----+--------+-------------+
   |    |     |        |             |
   +----+-----+--------+-------------+

Merchant_Refference 表是这样的,第一列是 AutoIncrement

  +----+-----+--------+---------------------+
  | id | mid | Reference 1  |   Reference 2 |
  +----+-----+--------------+---------------+
  |    |     |              |               |
  +----+-----+--------------+---------------+

现在我想使用插入语句将记录插入到所有三个表中,但是我如何从商家主表中获得相同的中间值到其他两个表 (mid不是AutoIncremented),我必须使用@@IDENTITY来实现这一点还是有其他方法。

【问题讨论】:

  • 您使用诸如“AutoIncrement”和“last insert id”之类的术语。这些通常与 MySQL 相关联。您确定您使用的是 SQL Server 吗?如果是这样,只有一个版本是合适的。
  • 是的,我正在使用 SQL 服务器
  • 你能为我们澄清一下吗...所以你想在所有三个表中插入相同的mid 不是 IDENTITY 列(不是自动递增的) 在其中任何一个?为什么不将相同的值插入所有三个中,是什么阻止了你?
  • 我有一个表单,我必须从用户那里获取输入并将记录插入三个表中,我正在使用存储过程来插入记录
  • 因为您使用表单进行用户输入,而存储过程来完成其余的工作。然后使用变量,它将保存用户输入数据,您可以在插入语句中使用它们。

标签: sql asp.net sql-server sql-server-2008 sql-server-2012


【解决方案1】:

使用您在 cmets 中发布的其他信息,您的存储过程应如下所示:

CREATE PROCEDURE dbo.StoredProcName
  @mid int,
  @acquirerID int,
  ...
AS
BEGIN
  SET NOCOUNT ON;
  SET XACT_ABORT ON;

  BEGIN TRANSACTION;

  INSERT INTO Merchant_Master (mid, acquirerID, merchantName)
    VALUES (@mid, @acquirerID, '...');

  INSERT INTO Merchant_PaymentDetail (mid, BankID, AccountNo)
    VALUES (@mid, ..., ...);

  INSERT INTO Merchant_Refference (mid, [Reference 1], [Reference 2])
    VALUES (@mid, ..., ...);

  COMMIT TRANSACTION;

END;

这样,您将相同的mid 插入到事务中的所有三个表中,并且您的所有IDENTITY(第一)列都将获得它们的自动递增值。

【讨论】:

  • 那有什么问题呢?你得到了什么错误,或者你想让它做什么,而它目前没有?
【解决方案2】:
INSERT INTO Merchant_Master (mid, acquirerID, merchantName)
VALUES...

DECLARE @mid INT = (SELECT mid FROM Merchant_Master WHERE id = SCOPE_IDENTITY())

...然后在您的INSERT 语句中将@mid 变量用于其他表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多