尝试使用包含逗号分隔的列更新集的变量.该变量最终包含有效的SQL(或更准确地说是有效的Coldfusion语法),但查询引发错误:[Macromedia] [SQLServer JDBC Driver] [SQLServer]'<'附近的语法不正确.
我从一个初始列开始更新:
<cfset sqlString = myColumn & ' = <cfqueryparam value="#myValue#" cfsqltype="#myDataType#" null="#NOT len(trim(myValue))#">'>
Run Code Online (Sandbox Code Playgroud)
然后循环执行一些表单元素:
<cfset sqlString = sqlString & ', ' & myColumn & ' = <cfqueryparam value="#myValue#" cfsqltype="#myDataType#" null="#NOT len(trim(myValue))#">'>
Run Code Online (Sandbox Code Playgroud)
我当然最终在sqlString中使用了一个完整的字符串,但为了便于阅读,它包含这样的内容:
id = <cfqueryparam value="123" cfsqltype="cf_sql_integer">,
csp = <cfqueryparam value="5" cfsqltype="cf_sql_integer">,
Q185 = <cfqueryparam value="" cfsqltype="cf_sql_integer" null="YES">,
Q3 = <cfqueryparam value="" cfsqltype="cf_sql_integer" null="YES">,
Q177 = <cfqueryparam value="" cfsqltype="cf_sql_date" null="YES">
Run Code Online (Sandbox Code Playgroud)
所以我尝试在这样的更新查询中使用它:
<cfquery name="update_answers" datasource="#application.datasource#">
UPDATE answers
SET #PreserveSingleQuotes(sqlString)#
WHERE rec_id = #id#
</cfquery>
Run Code Online (Sandbox Code Playgroud)
我在使用和不使用PreserveSingleQuotes功能的情况下尝试过此功能都无济于事.
如果我输出sqlString的内容并将其直接粘贴到查询中,它就可以正常工作: …