SQL 삽입을 수행하여 테이블을 채 웁니다. 하나의 테이블에 고유 한 생성 된 ID가 있습니다.이 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 서버 -
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
코드가 잘 삽입합니다. PRODUCT_DATA에서 사용할 자동 생성 PersonID를 가져 오려면 어떻게해야합니까?
user54197는 KM의 대답과 내 의견 봐. 누군가가 모르게 스토어 프로 시저를 변경하면 범위 ID를 사용하여 PersonID를 리턴 할 때 잠재적 인 문제점이 있습니다. – msarchet
@ msarchet : 이러한 잠재적 인 문제가 무엇인지 자세히 알아 보려면 어떻게해야합니까? 물론 누군가가 어떻게 작동하는지 알지 못하면 저장 프로 시저를 깨뜨릴 수 있지만'SCOPE_IDENTITY' 자체와는 아무런 관련이 없습니다. 또한 'OUTPUT INSERTED' 절을 깨뜨릴 수 있습니다. – LukeH
정확히 방금 말한대로 SCOPE_IDENTITY 자체와 관련이 없으며 훌륭하게 작동합니다. 다른 사람이 저장 프로 시저의 순서를 변경하면 중단되지 않기 때문에 삽입 된 출력을 사용하는 것이 더 확실합니다. 그것은 분명히 당신이 가치를 반환하는 방법에 관계없이 누군가가 항상 당신의 SP를 깰 수 있기 때문에 완벽하지는 않습니다. '@variable int output'과 같은 매개 변수를 사용하는 것은 출력을 얻는 가장 확실한 방법입니다. 그러나 여전히 누군가가 그것을 깨뜨릴 수는 있지만 여전히 어렵습니다. – msarchet