回答
根據具體實施,我們有這個問題兩種常用的方法:
1)在代碼中動態構建SQL查詢的過濾語句,跳過任何空的參數。如果允許用戶爲單個列選擇多個值(即選擇50個狀態中的0個或更多個來過濾數據),這是最好的方法。
例如:
假設txtCondition1和txtCondition2是文本框:
// Assuming conn is an open SqlConnection
System.Text.StringBuilder sbSQL = new StringBuilder(500);
List<SqlParameter> cParameters = new List<SqlParameter>();
// Add a default condition of 1=1 so that all subsequent conditions can be added
// with AND instead of having to check to see whether or not any other conditions
// were added before adding AND.
sbSQL.Append("SELECT * FROM MyTestTable WHERE 1 = 1 ");
if (!String.IsNullOrEmpty(txtCondition1.Text)) {
sbSQL.Append(" AND Column1 = @Column1");
cParameters.Add(new SqlParameter("@Column1", txtCondition1.Text));
}
if (!String.IsNullOrEmpty(txtCondition1.Text))
{
sbSQL.Append(" AND Column2 = @Column2");
cParameters.Add(new SqlParameter("@Column2", txtCondition2.Text));
}
SqlCommand oCommand = new SqlCommand(sbSQL.ToString, conn);
if (cParameters.Count != 0)
{
oCommand.Parameters.AddRange(cParameters.ToArray());
}
// Do something with oCommand
2)如果數值更多的限制,我們通常將它們傳遞到一個存儲過程,它負責確定是否不是通過測試「空白」參數來評估值,無論是空字符串還是空字符串,數字爲0等。
可以做的事情之一是檢查參數是否傳遞給您的存儲過程。你可以這樣說:
create procedure my_procedure (
@param1 as int = null
@param2 as int = null
) as
begin
select field1, field2, fieldn
from table
where ((@param1 is null) or (field2 = @param1))
and ((@param2 is null) or (field2 = @param2))
end
我寧願做這個SQL過程比應用壽
有一件事可能會回來咬你,T-SQL不會使'OR'子句短路。如果你用一個不喜歡NULL值的函數(如幾個全文搜索操作符)「或」它,你會得到一個錯誤。 –
的確如此。我沒有包含任何邏輯來處理這個示例,但是我通常會做的是在調用任何查詢之前處理所有參數。因此,上面的選擇缺少邏輯來檢查所有可能的問題,並將params重新分配給安全值。 – MilkyWayJoe
- 1. 如何處理JMeter中的動態參數名稱
- 2. 如何處理動態語言中的錯誤參數類型?
- 3. 如何處理動態數組?
- 4. 如何處理參數
- 5. 如何處理參數c#
- 6. SQL動態注入動態參數
- 7. 動態SQL與動態參數
- 8. 啓動與參數處理
- 9. SQL Openquery動態參數
- 10. 動態SQL空參數
- 11. 參數和teradata動態SQL
- 12. 處理動態列數
- 13. 紋理參數如何處理?
- 14. linq-to-sql處理動態查詢?
- 15. 處理空白列在動態SQL
- 16. Java如何處理動態布爾數組作爲方法參數?
- 17. 如何在動態sql中處理null段
- 18. 如何處理sql server 2008查詢中的動態輸入值
- 19. Javascript函數處理動態生成的參數
- 20. Javascript如何處理函數參數
- 21. JS如何處理函數參數?
- 22. T-SQL:如何在動態SQL中使用參數?
- 23. 處理SQL參數的最佳方法?
- 24. 在SQL Server中處理多個參數
- 25. 如何在Golang中處理動態URL
- 26. 動態CRM - 如何處理在.net
- 27. 如何處理動態模式BigQuery中
- 28. 如何處理硒中的動態行?
- 29. 如何處理動態的jQuery
- 30. 如何在Groovy中處理動態xpath?
您不能動態構建SQL字符串嗎? –
我認爲在應用程序中構建查詢比使用'where'子句執行這些檢查花費更多。在應用程序上執行此操作時,必須評估和檢查所有可能參數的值並執行邏輯以創建適當的查詢,並且根據數據庫,您更願意擁有對性能的靜態查詢(執行計劃等) – MilkyWayJoe