Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何编写存储过程将值插入到具有外键关系的两个表中?_Sql_Sql Server_Database_Sql Server 2012 - Fatal编程技术网

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。更好的建议是
输出
。不管在什么情况下,它都是有效的。