Sql 如何编写存储过程将值插入到具有外键关系的两个表中?
我创建了两个表,Sql 如何编写存储过程将值插入到具有外键关系的两个表中?,sql,sql-server,database,sql-server-2012,Sql,Sql Server,Database,Sql Server 2012,我创建了两个表,Employeeinfo和Employeerequests 表Employeeinfo可以有一个具有以下列的唯一用户: id(主键,自动递增) 名字 副署长 地址 表Employeerequests可以针对一个具有列的唯一用户ID发出多个请求 id(主键,自动递增) CustomerID(Employeeinfo(ID列)的外键) 类别 请求 现在我想以这种方式设计一个存储过程,以便可以同时将值插入两个表中。请帮忙。我对SQL非常陌生。提前谢谢。这篇评论有点长 SQL S
Employeeinfo
和Employeerequests
表Employeeinfo
可以有一个具有以下列的唯一用户:
- id(主键,自动递增)
- 名字
- 副署长
- 地址
Employeerequests
可以针对一个具有列的唯一用户ID发出多个请求
- id(主键,自动递增)
- CustomerID(Employeeinfo(ID列)的外键)
- 类别
- 请求
现在我想以这种方式设计一个存储过程,以便可以同时将值插入两个表中。请帮忙。我对SQL非常陌生。提前谢谢。这篇评论有点长 SQL Server只允许在单个查询中插入到一个表中。您可能希望同时提供员工和请求信息。因此,对插入的限制是一个真正的问题 您可以通过创建一个结合两个表的视图,然后在视图上定义一个
而不是insert
触发器来绕过这个限制。这一点在本节中进行了解释
也就是说,您似乎没有丰富的SQL知识。因此,我建议只使用两个单独的语句,每个表一个。如果您觉得方便的话,可以将它们包装在存储过程中。在存储过程中,可以使用
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
希望有帮助 “请帮忙”不是问题。展示并使用你的尝试,解释为什么它们不起作用。或者,向我们展示您为了解如何使用它而进行的研究,并告诉我们您不了解的内容。实际上,我在一个过程中尝试了两个单独的insert查询,但是在cloumn IDYou中geting error外键冲突error必须获取员工新创建的Id值,并在第二个insert语句中使用它。有多种方法可以获得此值,因此根据您的场景,您可能希望搜索最佳选项@@身份可能是个开始。@OnkelToob正是我想要你告诉我的。您是否有任何示例或链接..如我所说,@@IDENTITY可能是一个好的开始:。还有其他的可能性,当然它们都有优点/缺点,甚至有风险。但是如果不知道你的情况,没有人能告诉你。请考虑“拉努”的评论。如果你让人们知道你尝试了什么,出了什么问题,那么帮助就容易多了。@OnkelToob。更好的建议是
输出
。不管在什么情况下,它都是有效的。