【问题标题】:How to write a stored procedure to insert values into two tables with a foreign key relationship?如何编写存储过程以将值插入具有外键关系的两个表中?
【发布时间】:2019-12-22 14:43:24
【问题描述】:

我创建了两个表,EmployeeinfoEmployeerequests

Employeeinfo 可以有一个具有列的唯一用户:

  • id(主键,自动递增)
  • 姓名
  • 深度
  • 地址

而表Employeerequests 可以针对一个具有列的唯一用户ID 进行多个请求

  • id(主键,自动递增)
  • CustomerID(Employeeinfo 的外键(ID 列))
  • 类别
  • 请求。

现在我想设计一个存储过程,以便我可以同时将值插入两个表。请帮忙。我对 SQL 很陌生。提前致谢。

【问题讨论】:

  • “请帮助”不是问题。展示使用你的尝试,解释为什么他们没有工作。或者,向我们展示您为了解如何使用Create a Stored Procedure 而进行的研究,并告诉我们您对此不了解的地方。然后我们可以尝试详细说明。

标签: sql sql-server database sql-server-2012


【解决方案1】:

评论有点长。

SQL Server 只允许您在单个查询中插入一个表。您可能想同时提供员工和请求信息。所以对insert 的限制是一个真正的问题。

可以通过创建一个组合两个表的视图然后在视图上定义instead of insert 触发器来绕过限制。这在documentation 中有解释。

也就是说,您似乎没有广泛的 SQL 知识。所以,我建议只使用两个单独的语句,每个表一个。如果您觉得方便,可以将它们包装在存储过程中。

【讨论】:

  • 实际上我尝试在单个过程中使用两个单独的插入查询,但在 cloumn ID 中出现错误外键冲突错误
  • 您必须获取员工新创建的 Id 值并在第二个插入语句中使用它。有多种方法可以获得此值,因此根据您的情况,您可能需要搜索最佳选项。 @@IDENTITY 可以作为开始。
  • @OnkelToob 正是我想要你所说的。你有任何例子或任何链接..
  • 正如我所说,@@IDENTITY 可能是一个好的开始:docs.microsoft.com/en-us/sql/t-sql/functions/…。还有其他可能性,当然它们都有优点/缺点甚至风险。但是在不知道你的情况的细节的情况下,没有人能说出来。请考虑@larnu 的评论。如果您让人们知道您尝试了什么以及出了什么问题,那么提供帮助会更容易。
  • @OnkelToob 。 . .更好的推荐是OUTPUT。无论在什么情况下,它都能正常工作。
【解决方案2】:

在存储过程中,可以使用Insert语句的Output子句作为:

DECLARE @MyTableVar TABLE (NewCustomerID INT);  

-- The OUTPUT clause have access to all the columns in the table, 
-- even those not part of Insert statement ex:EmployeeID.
INSERT INTO [dbo].[Employeeinfo] ([Name], [dep], [address])  
OUTPUT INSERTED.Id INTO @MyTableVar  
    SELECT 'Test', 'TestDep', 'TestAddress'

-- then make insert in child table as   
INSERT INTO [dbo].[Employeerequests] (CustomerID, category)  
    SELECT NewCustomerID, 'TestCat'
    FROM @MyTableVar

Sample code here...

希望有帮助!

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多