gpt4 book ai didi

sql-server - INSERT INTO 从当前获取主键 ID

转载 作者:行者123 更新时间:2023-12-02 05:41:45 25 4
gpt4 key购买 nike

在 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>

在上面的示例中,我试图让 actionUpdate 返回主键的值,该主键是一个名为 ID 的列。

最佳答案

我写了“Please stop using SELECT MAX(id)”来解决这个问题。每个数据库都有一个内置函数,可以返回表中新插入记录的主键。

在 SQL Server 中,SCOPE_IDENTITY() 返回在当前范围内创建的最后一条记录的 ID,与表无关。

所以你的函数应该看起来更像这样:

  1. 您应该将值作为函数的参数传递(包括数据类型和所需值)。
  2. 您的值应该使用 CFQUERYPARAM 来防止 SQL 注入(inject)攻击。
  3. 您的函数应包含 output="false"
  4. 您的函数的返回类型应该是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>

FWIW,MySQL 有函数 LAST_INSERT_ID() 做同样的事情。您必须将 CF Admin 中数据源中的设置更新为 allow MySQL to run multiple statements .

关于sql-server - INSERT INTO 从当前获取主键 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com