如何参数化包含IN具有可变数量参数的子句的查询,比如这个?
SELECT * FROM Tags
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
在此查询中,参数的数量可以是1到5之间的任何值.
我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.
我有一个SQL Server存储过程,我想将一个varchar逗号分隔的值传递给一个IN函数.例如:
DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';
SELECT *
FROM sometable
WHERE tableid IN (@Ids);
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.我收到错误:
将varchar值'1,2,3,5,4,6,7,98,234'转换为数据类型int时转换失败.
如何在不诉诸构建动态SQL的情况下完成此任务(或相对类似的东西)?
我有一种情况,我在页面上显示记录,我需要一种方法让用户选择要在另一页上显示的那些记录的子集.这些记录不存储在任何地方,它是动态生成的东西.我知道我可以使用jquery将逗号分隔的值传递给我的其他网页,但我不确定在sql中最好的方法是说哪个uniqueid在这个id列表中不在表等中我我知道我可以用一堆ors动态构造sql,但这看起来像是一个黑客.还有其他人有什么建议吗?
LINQ to SQL在翻译我的一个查询时做了很糟糕的工作,所以我手工重写了它.问题是重写必然涉及一个IN条款,我不能为我的生活弄清楚如何ExecuteQuery为此目的传递集合.我在这里看到的唯一可以提出的就是使用string.Format整个查询字符串来克服它 - 但这会阻止查询在查询缓存中结束.
这样做的正确方法是什么?
注意:请注意我使用的原始SQL传递给 ExecuteQuery.我在第一句话中说过.告诉我使用Contains是没有用的,除非你知道一种混合Contains原始SQL的方法.
我正在尝试使用预备语句使用LIKE子句发出SQL请求.
这是代码:
using (SqlConnection Connection = new SqlConnection(ConnectionString))
{
Connection.Open();
string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE '@pseudopart%'";
using (SqlCommand Command = new SqlCommand(Query, Connection))
{
Command.Parameters.AddWithValue("@pseudopart", pseudoPart);
using (SqlDataReader Reader = Command.ExecuteReader())
{
if (!Reader.HasRows)
return PossibleMatch;
while (Reader.Read())
{
PossibleMatch.Add(Reader["Field"].ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
读者永远是空的,我做错了什么?
我搜索并搜索了一个答案,我找不到一个.我有一个选中的列表框,用户可以选择他们在计算机上遇到的问题.在选中的列表框中,您将看到诸如......慢,病毒,坏硬盘......以及根据他们选择的内容,我将告诉他们估计的维修费用.目前这是我构建查询的方式:
Dim mIssues As String = ""
For i = 0 To lstIssues.CheckedItemsCount - 1
If mIssues = "" Then
mIssues = String.Format("IssueName = '{0}'", lstIssues.CheckedItems(i))
Else
mIssues = String.Format("{0} OR IssueName = '{1}'", mIssues, lstIssues.CheckedItems(i))
End If
Next
Run Code Online (Sandbox Code Playgroud)
上面的代码将查看他们选择了多少问题.如果他们只选择一个问题,那么它将返回如下字符串:IssueName ='无论他们选择什么'.如果他们选择了多个问题,它将返回如下字符串:IssueName ='无论选择何种'或IssueName ='第二个选择'.因此,如果他们选择多个问题,我会在所有选项之间附加一个OR.我这样做是为了在我的查询中动态构建我的where子句.
这是我的查询:
Dim mySQL As String = "SELECT IssueID, IssueTypeID, IssueName, IssueDescription, " _
& "CustomerID, IndividualCost, GroupCost, Active, ChargeType " _
& "FROM (SELECT IssueID, IssueTypeID, IssueName, IssueDescription, " _
& "CustomerID, IndividualCost, GroupCost, Active, ChargeType " …Run Code Online (Sandbox Code Playgroud) sql ×4
sql-server ×4
c# ×2
t-sql ×2
linq ×1
linq-to-sql ×1
parameters ×1
security ×1
sql-in ×1
vb.net ×1