2017-02-22 3 views
1

SQLCommand 개체를 사용하여 저장 프로 시저를 호출하는 동안 쿼리 힌트를 지정하는 방법이 있는지 궁금하십니까?쿼리 힌트를 지정하는 SQLCommand 개체

예를 들어, 나는이 사용하는 SqlCommand 개체를 시뮬레이션 할 수있는 방법을 난 그냥 궁금이

EXECUTE SPName'0068', 40 WITH RECOMPILE 

처럼 뭔가를 호출해야합니다.

 Dim connection As New SqlClient.SqlConnection("server=(local);database=DEV;Persist Security Info=True;uid=sa;pwd=;") 
    connection.Open() 
    Dim cmd As New SqlClient.SqlCommand 
    With cmd 
     .Connection = connection 
     .CommandText = "Warehouse_AdjustInventory_byWarehouse_u" 
     .CommandType = CommandType.StoredProcedure 

     .Parameters.AddWithValue("@ProductID", "0068") 
     .Parameters.AddWithValue("@WarehouseID", 40) 
    End With 
    Try 
     Dim result As Integer = cmd.ExecuteNonQuery() 
     Trace.WriteLine(result) 
    Catch ex As Exception 
     Trace.WriteLine(ex.Message) 
    End Try 

    connection.Close() 

SQLCommand는 RECOMPILE과 같은 쿼리 힌트를 제공합니까? 고마워요

+1

* 왜 * WITH RECOMPILE을 사용 하시겠습니까? 이렇게하면 저장 프로 시저가 느려질 수 있습니다 *. 저장 프로 시저가 WHERE 술어를 변경하는 것과 같은 비효율적 인 기술을 사용하는 경우 쿼리를 수정하는 것이 좋습니다. 스토어드 프로 시저가 항상 재 컴파일되기를 원할 경우, 그냥 WITH COMPOUND 절을 –

답변

1

나는 CommandType을 Text으로 설정하고 CommandText에 원하는 문장 (EXECUTE SPName '0068', 40 WITH RECOMPILE)을 정확하게 넣을 수 있다고 생각합니다.

그러나 실제 질문은 모든 실행에 대해 프로 시저 내부의 모든 쿼리를 다시 컴파일하므로 실제로 WITH RECOMPILE이 무엇입니까? 실행 계획을 검토하고 재 컴파일의 이점을 얻을 수있는 개별 명령문을 식별하십시오. 그런 다음 이러한 쿼리에만 OPTION(RECOMPILE) 힌트를 사용하십시오.

+0

정의에 추가하면된다. 그러나 그것은 올바르지 만 사용하는 대신 매개 변수가있는 일반 스토어드 프로 시저를 사용한다는 것을 잊어 버렸다. TEXT를 CommandType으로 사용하십시오. 나는 CommandType = Text를 사용하는 것을 알고 있으며, 이미 그렇게했다. 그러나 CommandType = StoredProcedure와 함께 정규 SP 호출과 같은 힌트를 제공 할 수 있는지에 관해서는 더 많이 알고있다. –