【问题标题】:how to insert into 2 table using join in sql server?如何在 sql server 中使用 join 插入 2 个表?
【发布时间】:2017-08-28 13:42:56
【问题描述】:

我有 2 张桌子:

  1. T_Customer
  2. T_Address

T_Customer 表中有T_Address 外键。

在网页上创建的表单中,客户可以在其中添加名字、姓氏、地址等详细信息。

当客户提交表单时,地址详细信息应插入T_Address 表和T_Address ID 转到T_Customer 表是否可以一键创建 2 个插入操作?

这里面可以加入吗?

【问题讨论】:

  • 是的,阅读TRIGGER
  • 您不能在连接中执行此操作,因为插入无法传递变量。您将需要插入地址,然后插入客户。您也可以使用@@IDENTITY 变量在一个存储过程中执行此操作。
  • 您有 2 个选项。 1) 编写 2 个包装在事务中的 ado 查询并在失败时回滚。您可以轻松地读回插入的值。 Execute Insert command and return inserted Id in SqlBest way to get identity of inserted row?。 2)使用一个存储的过程,它接受你所有的参数并在那里执行你的插入。无论哪种方式,您都需要读回插入的客户记录的 Identity 值(参见上面的链接)。

标签: asp.net sql-server stored-procedures model-view-controller


【解决方案1】:

单个 INSERT 语句只能影响一个表,尽管您可能有一些触发器反过来影响其他表。但是,您的问题专门关于单击按钮的操作。这是非常可能的,而且确实非常可取。只需为自己创建一个存储过程,并将其作为参数传递给客户和地址表所需的所有字段。

然后在您的存储过程中,您可以有两个插入,一个到客户,一个到地址。如果您有参照完整性约束,那么您必须在地址之前插入客户。

这种方法的优点是存储过程中的所有命令都被同一个事务覆盖:它全部成功或全部失败,并且只需要一次往返数据库,从而更快并且使用更少的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多