我遇到了一個問題,即 SQLIN運算子不能在 C# 中處理多個標量變數值,但查詢在 SQL Server 2012 中有效。
這是有效的:
SELECT WorkStatus
FROM viewWorkRequest
WHERE WorkStatus IN ('Open', 'Closed')
但它在 C# 中不起作用
string All = "'Open','Closed'";
string sql = "SELECT WorkStatus FROM viewWorkRequest WHERE WorkStatus IN (@WorkStatus)"
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@WorkStatus", All);
cmd.ExecuteNonQuery();
}
提前致謝
uj5u.com熱心網友回復:
為什么您會認為第一個 SQL 有效這一事實會對不包含IN子句的第二個 SQL 產生任何影響?
每個引數只能包含一個值,并且IN子句中的每個值都是不同的,因此您不能為IN具有單個引數的子句傳遞多個值。如果您不知道您將擁有多少個值,那么您必須以允許可變數量引數的方式構建您的 SQL,例如
var values = new[] {"Open", "Closed"};
var sql = $"SELECT * FROM viewWorkRequest WHERE WorkStatus IN ({string.Join(", ", Enumerable.Range(0, values.Length).Select(n => "@WorkStatus" n))})";
var command = new SqlCommand(sql, connection);
for (var i = 0; i < values.Length; i )
{
command.Parameters.Add("@WorkStatus" i, SqlDbType.VarChar, 50).Value = values[i];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467277.html
上一篇:如何獲得查詢嵌套評論?
