2014-10-29 97 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