2017-02-22 36 views
1

我只是想知道在使用SQLCommand對象調用存儲過程時是否有指定查詢提示的方法?用於指定查詢提示的SQLCommand對象

例如,我需要調用是這樣的

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 RECOMPILE'子句添加到它的定義 –

回答

1

我相信你可以將CommandType設置爲Text,並將你想要的語句(EXECUTE SPName '0068', 40 WITH RECOMPILE)放到CommandText中。

但是,真正的問題是爲什麼WITH RECOMPILE在所有,因爲它會重新編譯每個執行過程中的所有查詢?檢查執行計劃並嘗試確定將從重新編譯中受益的個別語句。然後僅對這些查詢使用OPTION(RECOMPILE)提示。

+0

這在某種程度上是正確的,但我忘記提及我確實想使用帶有參數的常規存儲過程,而不是使用作爲CommandType的TEXT。我知道使用CommandType = Text會起作用,而且我已經這樣做了,但它更像是教育性的知道是否可以通過常規的SP調用提供這種提示CommandType = StoredProcedure –