Den*_*one 2 sql-server coldfusion
在ColdFusion中工作时,如何从最近的查询中返回主键ID值?
例如:
<cffunction name="addAction" access="public" returntype="string">
<cfquery name="newAction" datasource="RC">
INSERT INTO myTable (name,address,title) VALUE (#fname#,#address#,#usrtitle#);
</cfquery>
<cfset actionUpdateID = #result_name.IDENTITYCOL#>
<cfreturn actionUpdate>
</cffunction>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我试图actionUpdate
返回主键的值,该主键是一个名为的列ID
.
我写了" 请停止使用SELECT MAX(id) "来解决这个问题.每个数据库都有一个内置函数,它将返回表中新插入记录的主键.
在SQL Server中,SCOPE_IDENTITY()
返回在当前作用域内创建的最后一条记录的ID,而不管表是什么.
所以你的函数看起来应该更像这样:
CFQUERYPARAM
用于防止SQL注入攻击.output="false"
.numeric
因为您返回一个整数值(新的主键).<cffunction name="addAction" access="public" output="false" returntype="numeric">
<cfargument name="fname" type="string" required="true">
<cfargument name="address" type="string" required="true">
<cfargument name="usrtitle" type="string" required="true">
<cfquery name="newAction" datasource="RC">
INSERT INTO myTable (
name,
address,
title
)
VALUE (
<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.fname#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.address#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.usrtitle#">
);
// Return the new primary key for this record.
SELECT SCOPE_IDENTITY() AS NEW_ID;
</cfquery>
<cfreturn newAction.NEW_ID >
</cffuntion>
Run Code Online (Sandbox Code Playgroud)
FWIW,MySQL具有LAST_INSERT_ID()
做同样事情的功能.您必须在CF Admin中更新数据源中的设置,以允许MySQL运行多个语句.