如何获取新创建的记录的ID(PK)?

时间:2011-01-19 18:36:56

标签: sql-server-2005 coldfusion identity

给出一张表:

CREATE TABLE [GENERIC_TABLE] (
  [RECORD_ID] [int] IDENTITY(1,1) NOT NULL,
  [SHORT_DESC] [varchar] (50) NULL,
 CONSTRAINT [PK_GENERIC_TABLE] PRIMARY KEY CLUSTERED
 ...

我想插入一条记录,并将新RECORD_ID的值转换为ColdFusion变量。

我的CFQUERY应该是什么样的?

(不可否认,这可能是一个过于简单的问题。在我的辩护中,我习惯使用Oracle,而不是SQL Server。)

这适用于ColdFusion 8,但版本中立的解决方案很好。

2 个答案:

答案 0 :(得分:12)

如果在cfquery标记中设置结果属性,则返回主键而不使用额外的SQL

<cfquery datasource="x" result="resultName">
INSERT INTO...
</cfquery>

<cfset newID = resultName.IDENTITYCOL />
  • MSSQL:IDENTITYCOL
  • Oracle:ROWID
  • Sybase:SYB_IDENTITY
  • Informix:SERIAL_COL
  • Mysql:GENERATED_KEY

答案 1 :(得分:1)

出于某种原因,在复制行时无法使用结果。这是我为该案例找到的解决方案。 (注意,SQL Server特定的语法)

<cfquery name="dupRecord" datasource="#application.dsn#" result="dupResult">
    SET NOCOUNT ON;

    INSERT INTO dataProjects (DraftId,PublishStatus,ProjectName)
    SELECT 0,'draft',ProjectName
    FROM dataProjects
    WHERE projectId = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.projectId#">;

    SELECT SCOPE_IDENTITY() AS RecordID;
</cfquery>
<cfset dupProjectId = dupRecord.RecordID>