首页 > 解决方案 > 如何在coldfusion参数化查询的“IN”子句中使用SQL IIF中的整数值列表?

问题描述

如何在参数化coldfusion查询中以这种方式在“IN”子句中使用IIF?

<cfset id_check = '95,1' /> 
WHERE 
  id IN (
    IIF( 
      len( <cfqueryparam value="#id_check#" list="yes" /> ) > 0,
      <cfqueryparam cfsqltype="cf_sql_integer" value="#id_check#" list="yes" />,
      id 
    ) 
  )

标签: sql-server-2016coldfusion-2018

解决方案


我认为你有<cfqueryparam>向后的功能。id答案取决于IN (). 如果这应该是一个 ColdFusion 变量,那么以下内容将为您工作。

<cfif listLen(cash_drawer_number)>
  <cfset idList = cash_drawer_number>
<cfelse>
  <cfset idList = id>
</cfif>
<cfquery name="foo" datasource="datasource">
  SELECT id
  FROM test
  WHERE 
    id IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#idList#" list="yes" />)
</cfquery>

如果这与查询中的列相同,id则意味着您正在尝试获取所有记录。

<cfquery name="foo" datasource="datasource">
  SELECT id
  FROM test
  WHERE 
    1=1
    <cfif listLen(cash_drawer_number)>
      AND id IN ( <cfqueryparam cfsqltype="cf_sql_integer" value="#cash_drawer_number#" list="yes" /> )
    </cfif>
</cfquery>

推荐阅读