如何在Coldfusion中创建一个具有UUID名称的临时MySQL表?

时间:2013-04-14 17:37:45

标签: mysql coldfusion temp-tables

我正在使用Coldfusion8MySQL 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 '' 

2 个答案:

答案 0 :(得分:3)

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

我们有类似的情况,但有红砖。我们想为临时表创建唯一的名称。我们用自定义标签编写的方法是使用字符串“temp”,后跟随机数字。我们还有一些尝试/捕获的东西正在进行,以防我们真的不幸使用随机数。

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

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

答案 1 :(得分:2)

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

CREATE TEMPORARY TABLE ##variables.tt (

应该是

CREATE TEMPORARY TABLE #variables.tt# (

你有这种方式,当你想要的是创建一个名为值的临时表时,MySQL正试图使用​​字符串#variables.tt(doubled哈希转义ColdFusion中的字符) of variables.tt。