我正在做一个SQL Insert来填充我的表。我在一个表中有一个唯一的生成的ID,我想在另一个表中使用我的连接。这可能吗?我可以在SQL存储过程中分配一个变量吗?
.NET MVC -
using (SqlConnection connect = new SqlConnection(connections))
{
SqlCommand command = new SqlCommand("ContactInfo_Add", connect);
command.Parameters.Add(new SqlParameter("name", name));
command.Parameters.Add(new SqlParameter("address", address));
command.Parameters.Add(new SqlParameter("Product", name));
command.Parameters.Add(new SqlParameter("Quantity", address));
command.Parameters.Add(new SqlParameter("DueDate", city));
connect.Open();
command.ExecuteNonQuery();
}
SQL SERVER -
ALTER PROCEDURE [dbo].[Contact_Add]
@name varchar(40),
@address varchar(60),
@Product varchar(40),
@Quantity varchar(5),
@DueDate datetime
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO DBO.PERSON
(Name, Address) VALUES (@name, @address)
INSERT INTO DBO.PRODUCT_DATA
(PersonID, Product, Quantity, DueDate) VALUES (@Product, @Quantity, @DueDate)
END
的代码插入罚款。我如何将自动生成的PersonID拉到PRODUCT_DATA中使用?
user54197看看松下的答案,我就可以了评论。如果有人在不知不觉中更改了您的存储过程,则使用范围标识返回PersonID存在一些潜在问题。 – msarchet 2010-04-06 15:29:01
@msarchet:仔细阐述这些潜在问题是什么?当然,如果有人可以在不知道它如何工作的情况下改变存储过程,那么可以破坏存储过程,但这与SCOPE_IDENTITY本身无关 - 它们可能会破坏“OUTPUT INSERTED”子句。 – LukeH 2010-04-06 16:04:04
刚才你说的,这不是SCOPE_IDENTITY本身的问题,这很好。使用插入的输出更加确定,因为如果有人改变存储过程的顺序它不会中断。这并不完美,因为无论你如何返回价值,显然有人可能会破坏你的SP。使用像'@variable int output'这样的参数是获取输出最明显的方法。但是仍然有人可以打破这一点,但这仍然很难。 – msarchet 2010-04-06 16:08:44