在下面的代码中,我截断表的查询会引发错误:
"执行数据库查询时出错。[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#, </cfoutput>
</cfloop>
<cfset columnData = "#ProdData[columnNames[numColumns]][currentrow]#">
<cfoutput>#columnData#</cfoutput>
)<br />
</cfloop>
</cffunction>
答案 0 :(得分:2)
(来自评论)
如果它是永久表,并且从SSMS运行,那么它可能是权限问题。您是否在SSMS和CF数据源下使用相同的帐户?如果没有,请验证CF数据源帐户是否具有TRUNCATE
该表的权限。还要检查CF数据源设置是否有任何限制。请参阅“允许的SQL操作”部分。
根据错误消息,听起来帐户或DSN设置对该对象没有TRUNCATE
权限。