我正在使用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 ''
答案 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。