我正在做一個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