[英]Rewriting dynamic SQL in to stored procedure
我看到,這已經問過這個帖子 ,並又看了看WHEN-THEN
構造,但它確實沒有回答一些問題。
當前在代碼中,使用StringBuilder
構建SQL查詢,如下所示:
buildSearchQuery.Append("SELECT * FROM Policy WHERE Field_1 = '" + param_1 + "'");
if (Condition 2){
buildSearchQuery.Append("AND Field_2 = '" + param_2 + "' ");
}
if (Condition 2)
{
buildSearchQuery.Append("AND Field_3 = '" + param_3 + "' ");
}
...
您得到圖片。 這些參數值總共有20個,我的任務是創建一個存儲過程並將這些值作為參數傳遞。
我是否創建具有所有參數的存儲過程並在那里執行邏輯(如果不確定)。 像這樣嗎
SELECT * FROM TABLE WHERE Field_1 = @param_1
IF(@param_2 <> NULL)
AND Field_2 = param_2
...
這些參數並不總是具有值,因此它們不能成為查詢的一部分。 使這項工作牢記性能的最佳方法是什么?
您的存儲過程將具有3個參數@ param_1,@ param_2,@ param_3
這些參數的默認值可以設置為NULL。
存儲過程中的條件將是這樣的
WHERE ( @param_1 is NULL or field_1 = @param_1)
AND
( @param_2 is NULL or field_2 = @param_2)
AND
( @param_3 is NULL or field_3 = @param_3)
OPTOIN(RECOMPILE)
添加OPTION(RECOMPILE)
在每次執行查詢時重新構建執行計划,而使用OR
條件則將是有益的。
由於這些都是可空參數,因此可以在where中使用合並,而不是在括號內使用OR。 我認為它的閱讀效果更好。
在哪里合並(@ param_1,field_1)
和
合並(@ param_2,field_2)
和
合並(@ param_3,field_3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.