2017-02-22 21 views
1

Мне просто интересно, есть ли способ указать подсказку запроса при вызове хранимой процедуры с использованием объекта SQLCommand?SQLCommand Object для указания подсказки запроса

Например, мне нужно вызвать что-то вроде этого

EXECUTE SPName'0068', 40 WITH RECOMPILE 

Я просто удивляюсь, как я могу имитировать это с помощью объекта SqlCommand.

 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 WITH RECOMPILE' к его определению –

ответ

1

Я считаю, что вы можете установить CommandType на Text и поставить именно инструкцию, которую вы хотите (EXECUTE SPName '0068', 40 WITH RECOMPILE) в CommandText.

Однако, реальный вопрос заключается в том, почему WITH RECOMPILE вообще, поскольку он будет перекомпилировать все запросы внутри процедуры при каждом выполнении? Изучите план выполнения и попытайтесь определить отдельные заявления, которые выиграют от перекомпиляции. Затем используйте подсказку OPTION(RECOMPILE) только с этими запросами.

+0

Это как-то правильно, но я забыл упомянуть, что я хочу использовать обычную хранимую процедуру с параметрами, вместо того, чтобы использовать TEXT как CommandType. Я знаю, что использование CommandType = Text будет работать, и я уже сделал это, но он больше похож на образовательный, чтобы узнать, можно ли предоставлять такие подсказки регулярным вызовом SP с помощью CommandType = StoredProcedure –