从查询中过滤名称列表

时间:2016-03-11 09:59:10

标签: sql coldfusion qoq

我的查询类似于:

SELECT * 
FROM qAll 
WHERE name not in('Alina,Charaidew,Sukapha') 

哪个不行。最好的方法是什么?由于此列表是动态生成的,每次都可能不同。

5 个答案:

答案 0 :(得分:4)

Sql server将'Alina,Charaidew,Sukapha'视为单个Value,这就是为什么没有得到任何结果。

查询应该像..

SELECT * 
FROM qAll 
WHERE name not in('Alina','Charaidew','Sukapha')

答案 1 :(得分:4)

在CF中,您应该使用cfqueryparam来查询参数。要将列表作为参数传递,应将list属性添加到cfqueryparam。 您的查询应类似于以下内容:

<cfset nameList = "Alina,Charaidew,Sukapha">
<cfquery name="queryName" datasource="#Application.ds#">
        SELECT * FROM qAll WHERE name NOT IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" list="Yes" value="#nameList#" >)    
</cfquery>

答案 2 :(得分:2)

  

考虑qAll是一个查询对象。

'Alina,Charaidew,Sukapha'代表单个值,因此您需要使用cfqueryparam的列表attribute来指定它是一个列表,如:

<cfquery dbtype="query" name="someName">
    SELECT * 
    FROM qAll 
    WHERE name NOT IN (<cfqueryparam cfsqltype="cf_sql_varchar" value="Alina,Charaidew,Sukapha" list="yes" separator=",">)
</cfquery>

注意: - 这是区分大小写的。

答案 3 :(得分:0)

这里有两个部分:

  1. 问题的根源是您的列表的形成方式。 SQL正在查找以逗号分隔的列表,并使用单引号(&#39;)作为文本限定符。整个字符串包含在单引号(&#39;)中,因此被视为一个列表。
  2. 此致:

    SELECT * 
    FROM qAll 
    WHERE name not in('Alina,Charaidew,Sukapha') 
    

    更正SQL:

    SELECT * 
    FROM qAll 
    WHERE name not in('Alina','Charaidew','Sukapha') 
    
    1. 在ColdFusion中,最好在使用cfquery标记时使用cfqueryparam标记。这有助于提高性能,如果你的列表是一个变量,从sql注入(稍微)保护。请注意&#39;列表=&#34;是&#34;&#39;属性。这将使用单引号作为运行时的文本限定符来适当地限定列表。
    2.     <cfset names = "Alina,Charaidew,Sukapha">
          <cfquery name="queryName" datasource="#Application.ds#">
                  SELECT * FROM qAll WHERE name NOT IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" list="Yes" value="#nameList#" >)    
          </cfquery>
      

答案 4 :(得分:-1)

你也可以使用动态qyery ..

-d