当前位置: 首页 > 面试题库 >

参数化SQL IN子句

秦伯寅
2023-03-14
问题内容

我该如何对包含一个IN带有可变数量的参数的子句的查询进行参数化(例如这样的查询)?

SELECT * FROM Tags 
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC

在此查询中,参数的数量可以在1到5之间的任何位置。

我不希望对此(或XML)使用专用的存储过程,但是如果有一些特定于SQL Server 2008的优雅方法,我可以接受。


问题答案:

这是我使用的一种quick-and-dirty的技术:

SELECT * FROM Tags
WHERE '|ruby|rails|scruffy|rubyonrails|'
LIKE '%|' + Name + '|%'

因此,这是C#代码:

string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" };
const string cmdText = "select * from tags where '|' + @tags + '|' like '%|' + Name + '|%'";

using (SqlCommand cmd = new SqlCommand(cmdText)) {
   cmd.Parameters.AddWithValue("@tags", string.Join("|", tags);
}

两个警告:

表现很糟糕。LIKE “%…%”查询未建立索引
确保您没有任何|,空白或null标记,否则将无法使用



 类似资料:
  • 问题内容: 我正在将几个已硬编码到应用程序中的查询转换为动态的参数化查询。我遇到一个特定的查询,该查询有一个子句: 第一个参数很简单,因为它只是一个普通参数: 但是,第二个参数是一个整数列表,表示需要更新的行的ID。如何为单个参数传递整数列表?或者,您将如何设置此查询,以使您不必每次调用时都完全构建它,并且可以防止SQL注入攻击? 问题答案: 您可以基于(可能)可变数量的参数“动态”构建参数化查询

  • 问题内容: 我有这样的查询: 它与PDO和MySQL Workbench完美配合(根据需要返回10个URL)。 但是我试图用PDO 参数化: 返回空数组。 问题答案: 我只是测试了很多案例。我在OS X上使用PHP 5.3.15,并查询MySQL 5.6.12。 如果您进行以下设置,则任何组合均有效: 以下所有工作 :您可以使用an 或字符串;您不需要使用PDO :: PARAM_INT。 您还可

  • 我有一个抽象超类和两个非抽象子类和。如何在超类方法中定义类型,如下所示 我允许在子类方法中编写具体类型(例如,或) 在上面的示例中,子类方法不会覆盖超类方法。

  • 问题内容: 请考虑以下情况: 现在,我想定义一个扩展“动物”类的“鸟”类,以确保当鸟吃时,它只吃BirdFeed。 一种解决方案是指定一种合同,其中“ eat”的调用者必须传递适当提要的实例。 将参数的责任委托给调用者是否可以接受?如何强制调用者传递参数的特殊化?有替代设计解决方案吗? 问题答案: 您需要向该类添加类型变量: 然后,您可以将子类声明为需要特定类型的:

  • 上一节中我们给大家介绍了Fullpage的基本用法,可能很多用户有个性化的需求,没关系Fullpage提供了多个参数,我们可以配置这些参数,满足我们项目的需求。 controlArrows 默认值:true,决定是否使用控制箭头向左或向右移动幻灯片。 verticalCentered 默认值:true,决定是否初始化后,是否垂直居中网页的内容,如果你想自定义元素的位置,那么你可以设置为false,

  • 如下 ServletContext 接口方法允许 servlet 访问由应用开发人员在Web 应用中的部署描述符中指定的上下文初始化参数: getInitParameter getInitParameterNames 应用开发人员使用初始化参数来表达配置信息。代表性的例子是一个网络管理员的 e-mail 地址,或保存关键数据的系统名称。