2014-10-29 27 views
2

我试图获取刚刚插入的ID的值。注:我试图让列是默认值NEWID()创建的数据类型的唯一标识符结果无法在cfquery中使用railo

下面的代码是什么,我试图运行:

<cfquery datasource="#ds#" result="newReplyID"> 
    INSERT INTO nlforums_Reply(AnswerID, ReplyValue, UserID, CreateDateTime) 
    VALUES(<cfqueryparam value="#form.originalMessageID#" cfsqltype="CF_SQL_VARCHAR">, 
      <cfqueryparam value="#form.replyValue#" cfsqltype="CF_SQL_LONGVARCHAR">, 
      <cfqueryparam value="#form.userID#" cfsqltype="CF_SQL_VARCHAR">, 
      <cfqueryparam value="#form.posted#" cfsqltype="CF_SQL_DATE"> 
      ) 
</cfquery> 
<cfdump var="#newReplyID['IDENTITYCOL']#" /> 

我得到的错误:键[ IDENTITYCOL]不存在

这里会发生什么,如果我倾倒#newReplyID#

enter image description here

+0

你想说什么,当你做' '? – 2014-10-29 01:21:56

+0

编辑问题 – user1431633 2014-10-29 01:34:25

+0

我在Railo方面没有太多经验,但按照链接http://www.intermedia.com.au/railo-context/doc/tags.cfm?item=cfquery我认为它不包含'result'中的IDENTITYCOL属性。 – 2014-10-29 01:35:07

回答

4

这里是什么工作。结果属性不适用于UUID。

<cfquery datasource="#ds#" name="newReplyID"> 
    INSERT INTO nlforums_Reply(AnswerID, ReplyValue, UserID, CreateDateTime) 
    OUTPUT inserted.ReplyID 
    VALUES(<cfqueryparam value="#form.originalMessageID#" cfsqltype="CF_SQL_VARCHAR">, 
      <cfqueryparam value="#form.replyValue#" cfsqltype="CF_SQL_LONGVARCHAR">, 
      <cfqueryparam value="#form.userID#" cfsqltype="CF_SQL_VARCHAR">, 
      <cfqueryparam value="#form.posted#" cfsqltype="CF_SQL_DATE"> 
      ) 
</cfquery> 
<cfdump var="#newReplyID#" /> 
+0

如果该字段是UUID,为什么不用ColdFusion创建一个并使用它? – 2014-10-29 02:03:47

+0

@DanBracuk - 因为它听起来像是由SQL Server自动填充的表的PK,就像使用IDENTITY列一样,只有它使用UUID。 – Leigh 2014-10-29 02:11:11

+0

很好,你回来的答案。 – 2014-10-29 04:01:24

0

您是否尝试过使用queryExecute来代替?

+0

绝对更好的语法。我不认为这会有所作为。错误的原因是他们的PK是UUID类型,而不是身份。因此,INSERT不会返回标识值。因此“IDENTITYCOL不存在”错误。 – Leigh 2014-11-19 21:33:14

1

我认为,如果深入挖掘一下,您可能会发现IDENTITYCOL已被弃用且不再可从SQL Server 2012转发。

这个解决方案仍然很好地工作,但: INSERT INTO表(COL1,COL2等) 输出inserted.IDcolumnName VALUES(1,2等)

+0

(编辑 - 错字修正)您可能正在考虑一个不同的功能。在CF中,'result.IDENTITYCOL'引用执行INSERT查询后应用程序服务器检索到的SCOPE_IDENTITY()值。它与此处提到的不建议使用的SQL Server功能非常不同:[“IDENTITYCOL作为DML语句中的列名称....”](https://technet.microsoft.com/zh-cn/library/ms143729%28v= sql.110%29.aspx)。虽然同意,OUTPUT技术[在接受的答案中已经提到](http://stackoverflow.com/a/26621630/104223)运作良好。 – Leigh 2015-05-05 02:21:18