我有一个类似的查询:
SELECT *
FROM qAll
WHERE name not in('Alina,Charaidew,Sukapha')
这是行不通的。最好的方法是什么?由于此列表是动态生成的,并且可能每次都不同。
我有一个类似的查询:
SELECT *
FROM qAll
WHERE name not in('Alina,Charaidew,Sukapha')
这是行不通的。最好的方法是什么?由于此列表是动态生成的,并且可能每次都不同。
Sql server 将'Alina,Charaidew,Sukapha'
其视为单个值,这就是为什么没有得到任何结果。
查询应该像..
SELECT *
FROM qAll
WHERE name not in('Alina','Charaidew','Sukapha')
在 CF 中,您应该使用 cfqueryparam 来查询参数。要将列表作为参数传递,您应该将列表属性添加到 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>
考虑
qAll
是一个查询对象。
'Alina,Charaidew,Sukapha'
表示单个值,因此您需要使用cfqueryparam
's list指定它是一个列表,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>
注意:- 这是区分大小写的。
这里有两个部分:
你的:
SELECT *
FROM qAll
WHERE name not in('Alina,Charaidew,Sukapha')
正确的 SQL:
SELECT *
FROM qAll
WHERE name not in('Alina','Charaidew','Sukapha')
<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>
您也可以使用动态 qyery ..
declare @filter nvarchar(50)
,@sql nvarchar(4000)
set @filter ='Alina,Charaidew,Sukapha'
set @sql ='SELECT *
FROM qAll
WHERE name not in('''+replace(@filter,',',''',''')+''')';
exec (@sql)