我认为您的问题是您没有将 CF 函数放在 # 符号和引号中。
<cfquery name="splitname" datasource="dsn">
UPDATE dbo.employees
SET
lastname = '#listFirst(fullname, ",")#'
, firstname = '#listRest(fullname, ", ")#'
</cfquery>
你真的应该使用。
<cfquery name="splitname" datasource="dsn">
UPDATE dbo.employees
SET
lastname = '<cfqueryparam cfsqltype="cf_sql_varchar"
value="#listFirst(fullname, ",")#">'
</cfquery>
作为最佳实践,我会在 SQL 语句之前清理变量并使用 trim 函数去除空格。
<cfscript>
firstname = trim(listFirst(fullname, ","));
lastname = trim(listLast(fullname, ","));
</cfscript>
<cfquery name="splitname" datasource="dsn">
UPDATE dbo.employees
SET
firstname = '<cfqueryparam cfsqltype="cf_sql_varchar" value="#firstname#">'
, lastname = '<cfqueryparam cfsqltype="cf_sql_varchar" value="#firstname#">'
</cfquery>
此外,我们一直在尝试使用 SQL 的 DECLARE 语句来定义那里的变量。这使得向您的 DBA 提供复杂查询并让他们能够快速使用它们变得非常容易。此外,许多查询多次使用相同的变量,因此在列表顶部声明它们更加容易和清晰。
<cfscript>
firstname = listFirst(fullname, ",");
lastname = listLast(fullname, ",");
</cfscript>
<cfquery name="splitname" datasource="dsn">
DECLARE @FirstName varchar(50) = <cfqueryparam cfsqltype="cf_sql_varchar" value="#firstname#">
DECLARE @LastName varchar(50) = <cfqueryparam cfsqltype="cf_sql_varchar" value="#lastname#">
UPDATE dbo.employees
SET
firstname = @FirstName
, lastname = @LastName
</cfquery>