Coldfusion 将SQL函数作为值传入的正确方法

Coldfusion 将SQL函数作为值传入的正确方法,coldfusion,coldfusion-11,Coldfusion,Coldfusion 11,每次用户更新记录时,我都要更新记录的DateUpdated字段 我想我应该这样做: <cfquery> UPDATE dbo.MyTable SET DateUpdated = <cfqueryparam value="GetDate()" /> </cfquery> 第一个函数不起作用,因为您参数化了SQL函数名,所以它将以文本字符串形式传递“GetDate()”。但是,如果将“GetDate()”替换为“#Now()#”,它应该可以工作,因为您正在从Co

每次用户更新记录时,我都要更新记录的DateUpdated字段

我想我应该这样做:

<cfquery>
UPDATE
dbo.MyTable
SET DateUpdated = <cfqueryparam value="GetDate()" />
</cfquery>

第一个函数不起作用,因为您参数化了SQL函数名,所以它将以文本字符串形式传递“GetDate()”。但是,如果将“GetDate()”替换为“#Now()#”,它应该可以工作,因为您正在从ColdFusion函数传递值


第二个应该按原样工作

第一个函数不起作用,因为您参数化了SQL函数名,所以它将“GetDate()”作为文本字符串传递。但是,如果将“GetDate()”替换为“#Now()#”,它应该可以工作,因为您正在从ColdFusion函数传递值


第二个应该按原样工作

这将更新表中的每一行,BTW@JamesAMohler你是对的,这只是一个示例代码,你混淆了CF和数据库函数。cfqueryparam中的表达式首先由CF服务器计算。然后,CF将经过计算的SQL字符串发送到数据库进行处理。由于
getDate()
是一个SQL Server函数,CF对此一无所知。这意味着您不能在cfqueryparam中使用它。您只能使用CF函数,例如
now()
(续)使用函数没有任何区别。
cfsqltype
应用于函数返回的单个值。如果函数返回日期时间对象(如
now()
does),则根据是否希望包含时间部分,使用
cf\u sql\u timestamp
(日期和时间)或
cf\u sql\u date
(仅日期)。但是,正如Carl指出的,如果您还可以使用数据库函数
getDate()
。在这种情况下,您根本不需要cfqueryparam。RE:将SQL函数作为值传入的正确方法为了澄清和回答您的问题,数据库函数不是“值”。这是一个sql命令,必须由数据库进行计算。用cfqueryparam包装它可以防止这种情况发生。所以答案是:不要在数据库函数上使用cfqueryparam。第二个示例是正确的语法。这将更新表中的每一行,BTW@JamesAMohler你是对的,这只是一个示例代码,你混淆了CF和数据库函数。cfqueryparam中的表达式首先由CF服务器计算。然后,CF将经过计算的SQL字符串发送到数据库进行处理。由于
getDate()
是一个SQL Server函数,CF对此一无所知。这意味着您不能在cfqueryparam中使用它。您只能使用CF函数,例如
now()
(续)使用函数没有任何区别。
cfsqltype
应用于函数返回的单个值。如果函数返回日期时间对象(如
now()
does),则根据是否希望包含时间部分,使用
cf\u sql\u timestamp
(日期和时间)或
cf\u sql\u date
(仅日期)。但是,正如Carl指出的,如果您还可以使用数据库函数
getDate()
。在这种情况下,您根本不需要cfqueryparam。RE:将SQL函数作为值传入的正确方法为了澄清和回答您的问题,数据库函数不是“值”。这是一个sql命令,必须由数据库进行计算。用cfqueryparam包装它可以防止这种情况发生。所以答案是:不要在数据库函数上使用cfqueryparam。您的第二个示例是正确的语法。我尝试使用Now()但它没有提供时间。但是SQL自己的GetDate()确实如此。见我上面的评论。对,明白了。我使用了Now()和cf_sql_date,因此时间部分从未被写入!我尝试使用Now(),但它无法提供时间。但是SQL自己的GetDate()确实如此。见我上面的评论。对,明白了。我使用了Now()和cf_sql_date,因此时间部分从未被写入!
<cfquery>
    UPDATE
    dbo.MyTable
    SET DateUpdated = GetDate()
</cfquery>