2011-01-19 65 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>