Coldfusion"找不到对象"错误,但可以在代码的其他部分找到

时间:2015-11-03 19:21:17

标签: sql-server coldfusion

在下面的代码中,我截断表的查询会引发错误:

  

"执行数据库查询时出错。[Macromedia] [SQLServer JDBC驱动程序] [SQLServer]无法找到对象"" temp_person""因为它不存在或您没有权限。

但是如果我将它注释掉,那么当我插入表格时,相同的数据源/表组合不会引发错误。如果我手动截断SSMS中的表,然后运行该过程,数据副本就可以了。但如果我再次运行它,我显然会得到重复。

当我尝试截断表时,为什么CF不能找到表,但是当我插入时可以找到?

代码:

<cffunction name="copyProdToDev">

    <cfargument name="devDatasource" >
    <cfargument name="prodDataSource" type="string">
    <cfargument name="devTableName" type="string">
    <cfargument name="prodTableName" type="string">
    <cfargument name="dateColumnName" default="none">
    <cfargument name="startDate" default=Now()>

    <h1>In function</h1>

    <cfquery name="ProdData" datasource="#prodDatasource#" timeout="60">
        SELECT *
        FROM #prodTableName#
        <cfif dateColumn neq "none">
        WHERE #dateColumn# > <cfqueryparam cfsqltype="cf_sql_date" value="#startDate#">
        </cfif>
    </cfquery>

    <cfset columnNames = ProdData.getColumnNames()> 
    <cfset numColumns = ArrayLen(columnNames)>

    <cfdump var="#columnNames#">


    <cfdump var="#devTableName#" abort="false">
    <cfquery datasource="#devDatasource#" timeout="60">
        TRUNCATE TABLE #devTableName#
    </cfquery>

    <cfloop query="#ProdData#">

        <cfquery datasource="#devDatasource#" timeout="60">
            INSERT INTO #devTableName# VALUES
            (
            <cfloop index="colNumber" from="1" to="#ArrayLen(columnNames)-1#">
                <cfset columnData = "#ProdData[columnNames[colNumber]][currentrow]#">
                <cfqueryparam cfsqltype="cf_sql_varchar" value="#columnData#">,
            </cfloop>
            <cfset columnData = "#ProdData[columnNames[numColumns]][currentrow]#">
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#columnData#">
            )
        </cfquery>

        (
        <cfloop index="colNumber" from="1" to="#ArrayLen(columnNames)-1#">
            <cfset columnData = "#ProdData[columnNames[colNumber]][currentrow]#">
            <cfoutput>#columnData#, &nbsp;</cfoutput>
        </cfloop>
        <cfset columnData = "#ProdData[columnNames[numColumns]][currentrow]#">
        <cfoutput>#columnData#</cfoutput>
        )<br />
    </cfloop>

</cffunction>

1 个答案:

答案 0 :(得分:2)

(来自评论)

如果它是永久表,并且从SSMS运行,那么它可能是权限问题。您是否在SSMS和CF数据源下使用相同的帐户?如果没有,请验证CF数据源帐户是否具有TRUNCATE该表的权限。还要检查CF数据源设置是否有任何限制。请参阅“允许的SQL操作”部分。

根据错误消息,听起来帐户或DSN设置对该对象没有TRUNCATE权限。