SQL 문이 랩핑되는 이유는 특성 sp_executesql
설정 및 모든 매개 변수를 명령에 전달하기 때문입니다.SqlCommand.Commandtype
SqlCommand cmd = new SqlCommand("proc1", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", 1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
위의 코드는이 T-SQL로 끝납니다.
exec proc1 @param1=1
SqlCommand cmd = new SqlCommand("proc1", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@param1", 1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
이 코드는 다음 T-SQL의 실행으로 끝납니다.
exec sp_executesql N'proc1',N'@param1 int',@param1=1
추가 23.12.15 :CommandType.Text
명령을 사용 하면 결과가 비슷합니다. 매개 변수가 명령 개체에 추가되면 .NET은 전체 쿼리를 래핑 sp_executesql
하고 매개 변수에 전달합니다.
추가 :sp_executesql
.NET 클래스 의이 동작을 더 깊이 파고 들인 후 매개 변수 스니핑 및 계획 캐싱은 높은 빈도의 쿼리 컴파일 및 계획 수를 피하기 위해 완전히 의미가 있습니다. 따라서 기본적으로 SQL Server 성능을 전반적으로 향상 시키도록 설계되었지만 동시에 생성 된 초기 쿼리 계획과 다른 매개 변수 값으로 사용되는 일부 쿼리 (매개 변수 스니핑 문제)의 성능이 저하 될 수 있습니다.
보다:
위 샘플은 .NET Framework 4.5 및 SQL Server 2008 Developer Edition을 사용하여 작성되었습니다.