0

我正在使用Coldfusion8并且MySQL 5.0.91正在尝试创建一个临时表,从 CSV 导入一些数据,验证,存储在数据库中并删除临时表。

我可以直接在 MySQL 中执行所有步骤,它可以毫无问题地工作。但是,当我尝试在 Coldfusion 中创建临时表时,我不断收到 MySQL 错误。

这就是我所拥有的:

<cfset variables.tt = CreateUUID()>
<cfquery datasource="#session.datasource#">
    DROP TEMPORARY TABLE IF EXISTS ##variables.tt;
    CREATE TEMPORARY TABLE ##variables.tt (
      tmp_kto VARCHAR(7) DEFAULT ''
    , tmp_kz VARCHAR(3) DEFAULT ''
    , tmp_preisliste VARCHAR(1) DEFAULT ''
    , tmp_eg VARCHAR(3) DEFAULT ''
    ) ENGINE=MEMORY;
 </cfquery>

这是行不通的。我也试过了#variables.tt#variables.tt但我一直收到同样的错误,而当我直接在 MySQL 中运行代码时它工作正常(表名“test”)

问题
我不知道我做错了什么。表名是否有最大长度?

感谢您的一些见解。

编辑:
我得到通常的错误:

 you have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right syntax to use near 
 'CREATE TEMPORARY TABLE #variables.tt (tmp_sa VARCHAR(3) DEFAULT '' 
4

2 回答 2

3

您的问题最可能的根源是 uuid 不适合作为表名。一方面,它包含连字符。我不知道 MySQL 是否允许这样做,但我不记得曾经在表名中看到过连字符。

我们也有类似的情况,但使用的是 redbrick。我们想为临时表创建唯一的名称。我们使用自定义标签编写的方法是使用字符串“temp”,后跟一个随机数。我们也有一些尝试/捕捉的东西,以防我们对随机数真的很不走运。

几年前我写了那个标签。如果我再做一次,我可能会用 cftoken、cfid 和 tickcount 替换随机数。

此外,您不能在创建表之前删除它。

于 2013-04-14T18:05:19.693 回答
2

在我看来,您缺少要输出的变量周围的哈希标记。

CREATE TEMPORARY TABLE ##variables.tt (

应该

CREATE TEMPORARY TABLE #variables.tt# (

#variables.tt按照您的方式,当您想要创建一个名称为variables.tt的临时表时,MySQL 正在尝试使用字符串(加倍的哈希转义 ColdFusion 中的字符)。

于 2013-04-15T15:57:02.337 回答