Scope_identity()以"@ P11"错误返回.MSSQL,Coldfusion.试图获取最后插入的ID

Ste*_*gic 1 sql-server coldfusion scope-identity

我在SELECT Scope_Identity()中收到错误

我正在从表单中插入一行新数据.该行生成自动标记的ID(RBID).

我试图立即抓住它并将其(RBID)插入另一行,因此可以在需要时引用它.

<cfquery name="recbilling" datasource="#request.dsn#" result="myResult">
INSERT INTO RBilling
(CID, UserID, DateCompleted, ClientID, Title, Qty, Rate, Taxable, Description, NextBillingDate,
FrequencyUnit, FrequencyDuration, ProjectID)
VALUES (
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">, 
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">, 
<cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">, 
<cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">, 
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#NextBillingDate#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyUnit#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyDuration#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">)
</cfquery>

<cfquery name="getRBID" datasource="#request.dsn#">
SELECT Scope_Identity() as newID
</cfquery>
<cfset RBID = #getRBID.newID#>
</cfif>




<cfquery name="submithourssubmit" datasource="#request.dsn#">
INSERT INTO Billedfees
(CID, UserID, DateCompleted, ClientID, Title, Qty, Rate, Taxable, Description, ProjectID, RBID)
VALUES (
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">,
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">, 
<cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">, 
<cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#RBID#">
)
</cfquery>
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:执行数据库查询时出错.[Macromedia] [SQLServer JDBC驱动程序] [SQLServer]'@ P11'附近的语法不正确.
第57行发生错误.

我花了一段时间来弄清楚@ P11是什么,但看起来第一个查询中的FrequencyUnit或第二个插入查询中的RBID都有问题.

数据类型设置正确.

先感谢您.

编辑:

SQL String(param 1)= [type ='IN',class ='java.lang.Integer',value ='15488',sqltype ='CF_SQL_INTEGER'],(param 2)= [type ='IN',class ='java.lang.Integer',value ='21066',sqltype ='CF_SQL_INTEGER'],(param 3)= [type ='IN',class ='java.sql.Timestamp',value ='2013-03 -22 00:00:00.0',sqltype ='CF_SQL_TIMESTAMP'],(参数4)= [type ='IN',class ='java.lang.Integer',value ='143933',sqltype ='CF_SQL_INTEGER'] ,(param 5)= [type ='IN',class ='java.lang.String',value ='Software Test 3',sqltype ='CF_SQL_VARCHAR'],(param 6)= [type ='IN', class ='java.lang.Float',value ='1.0',sqltype ='CF_SQL_REAL'],(param 7)= [type ='IN',class ='java.lang.Float',value = '33 .0' ,sqltype ='CF_SQL_REAL'],(param 8)= [type ='IN',class ='java.lang.Boolean',value ='false',sqltype ='CF_SQL_BIT'],(param 9)= [type ='IN',class ='java.lang.String',value ='Software Test 3',sqltype ='CF_SQL_LONGVARCHAR'],(param 10)= [type ='IN',class ='java.lang.Integer ',value ='0',sqltype ='CF_SQL_INTEGER'],(参数11)= [type ='IN',cl ass ='java.lang.Integer',value ='153314',sqltype ='CF_SQL_INTEGER']

这是我到目前为止所得到的:

<cftransaction>


<cfset NextBillingDate = #DateAdd("#FrequencyUnit#", "#FrequencyDuration#", #DateCompleted#)#>

<cfquery name="recbilling" datasource="#request.dsn#" result="myResult">
INSERT INTO RBilling
(CID, UserID, DateCompleted, ClientID, Title, Qty, Rate, Taxable, Description, NextBillingDate,
FrequencyUnit, FrequencyDuration, ProjectID)
VALUES (
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">, 
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">, 
<cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">, 
<cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">, 
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#NextBillingDate#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyUnit#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyDuration#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">)
</cfquery>


<cfoutput>
<Cfset RBID="#myResult.identitycol#">
</cfoutput>





<cfquery name="submithourssubmit" datasource="#request.dsn#">
INSERT INTO Billedfees
(CID, UserID, DateCompleted, ClientID, Title, Qty, Rate, Taxable, Description, ProjectID, RBID)
VALUES (
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">,
<cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">, 
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">, 
<cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">, 
<cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">, 
<cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">, 
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#RBID#">
)
</cfquery>
Run Code Online (Sandbox Code Playgroud)

这给了我相同的错误:执行数据库查询时出错.[Macromedia] [SQLServer JDBC驱动程序] [SQLServer]'@ P11'附近的语法不正确.
错误发生在第59行.

第59行是第二个插入查询中的.

如果您还有其他需要,请告诉我.

谢谢

ste*_*eve 6

您可以使用此方法访问该变量

<cfoutput>#myResult.identitycol#</cfoutput>
<Cfset rbid = myResult.identitycol>
Run Code Online (Sandbox Code Playgroud)

既然您使用的是MSSQL,那么您的结果将具有该.identitycol属性.

我相信如果你使用mysql,oracle,access,它可能会有所不同(从cf9开始),但我认为它们在cf10中标准化了.


更新:

错误的原因是您在RBID字段前面缺少逗号.以下是您的代码的固定版本:

<cftransaction>

    <cfset NextBillingDate = DateAdd(FrequencyUnit, FrequencyDuration, DateCompleted)>

    <cfquery name="recbilling" datasource="#request.dsn#" result="myResult">
        INSERT INTO RBilling 
        (
          CID
          , UserID
          , DateCompleted
          , ClientID
          , Title
          , Qty
          , Rate
          , Taxable
          , Description
          , NextBillingDate
          , FrequencyUnit
          , FrequencyDuration
          , ProjectID
        )
        VALUES 
        (
          <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">
          , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">
          , <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">
          , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">
          , <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">
          , <cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">
          , <cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">
          , <cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">
          , <cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">
          , <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#NextBillingDate#">
          , <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyUnit#">
          , <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FrequencyDuration#">
          , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">
       )
    </cfquery>

    <cfset RBID = myResult.identitycol>

    <cfquery name="submithourssubmit" datasource="#request.dsn#">
        INSERT INTO Billedfees (
            CID
            , UserID
            , DateCompleted
            , ClientID
            , Title
            , Qty
            , Rate
            , Taxable
            , Description
            , ProjectID
            , RBID
        )
        VALUES (
            <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">
            , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#UserID#">
            , <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#DateCompleted#">
            , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ClientID#">
            , <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#text0#">
            , <cfqueryparam cfsqltype="CF_SQL_REAL" value="#Qty#">
            , <cfqueryparam cfsqltype="CF_SQL_REAL" value="#text2#">
            , <cfqueryparam cfsqltype="CF_SQL_BIT" value="#Taxable#">
            , <cfqueryparam cfsqltype="CF_SQL_LONGVARCHAR" value="#text1#">
            , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ProjectID#">
            , <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#RBID#">
        )
    </cfquery>

</cftransaction>
Run Code Online (Sandbox Code Playgroud)