2011-01-19 64 views
2

给定一个表:如何获取新创建记录的ID(PK)?

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应该是什么样子?

(诚然,这可能是一个过于简单的问题,在我的防守,我用来与甲骨文合作,而不是SQL服务器。)

本作的ColdFusion 8,但版本中立的解决方案是好的。

回答

12

如果设置在cfquery标签结果属性是不需要额外的SQL返回的主键

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

<cfset newID = resultName.IDENTITYCOL /> 
  • MSSQL:IDENTITYCOL
  • 甲骨文:ROWID
  • 的Sybase:SYB_IDENTITY
  • 的Informix: SERIAL_COL
  • Mysql:GENERATED_KEY
+3

resultName.generatedkey适用于CF9中的所有数据库 – Henry 2011-01-19 19:10:34

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>