给出一张表:
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,但版本中立的解决方案很好。
答案 0 :(得分:12)
如果在cfquery
标记中设置结果属性,则返回主键而不使用额外的SQL
<cfquery datasource="x" result="resultName">
INSERT INTO...
</cfquery>
<cfset newID = resultName.IDENTITYCOL />
IDENTITYCOL
ROWID
SYB_IDENTITY
SERIAL_COL
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>