Sql server Coldfusion“找不到对象”错误,但可以在代码的其他部分中找到

Sql server Coldfusion“找不到对象”错误,但可以在代码的其他部分中找到,sql-server,coldfusion,Sql Server,Coldfusion,在下面的代码中,截断表的查询抛出错误: 执行数据库查询时出错。[Macromedia][SQLServer JDBC Driver][SQLServer]找不到对象temp_person,因为它不存在或您没有权限 但是如果我将其注释掉,那么当我插入到表中时,相同的数据源/表组合不会抛出错误。如果我在SSMS中手动截断该表,然后运行该进程,那么数据拷贝会很好。但如果我再运行一次,我显然会被骗 为什么CF在试图截断表时找不到它,但在插入时却可以找到 代码: 从评论中 如果它是一个永久表,并且从SSM

在下面的代码中,截断表的查询抛出错误:

执行数据库查询时出错。[Macromedia][SQLServer JDBC Driver][SQLServer]找不到对象temp_person,因为它不存在或您没有权限

但是如果我将其注释掉,那么当我插入到表中时,相同的数据源/表组合不会抛出错误。如果我在SSMS中手动截断该表,然后运行该进程,那么数据拷贝会很好。但如果我再运行一次,我显然会被骗

为什么CF在试图截断表时找不到它,但在插入时却可以找到

代码:

从评论中

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


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

是临时表还是永久表?只是确认一下,您是否对两个cfquery?Permanent使用相同的DSN。相同的DSN数据源。实际上,我在dev服务器上创建了一个名为temp_person的表来测试这个过程。最终,数据将从prod.person传递到dev.person。还有我需要复制的所有其他表…那可能是权限问题。您是否对SSM和CF DSN使用相同的帐户?如果没有,DSN帐户是否有权截断该表,CF DSN设置是否允许截断?现在有一个好问题。用于服务器的物理计算机最近已更改,数据已迁移到新服务器。也许我有插入权限,但没有截断权限?我会让系统管理员调查一下。是的。我以管理员身份登录到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>