我有以下查询,所以我可以将一些行复制到同一个表中:
START TRANSACTION;
CREATE TEMPORARY TABLE IF NOT EXISTS copy AS SELECT * FROM table WHERE table.field= 'foo';
UPDATE copy SET copy.field = REPLACE(copy.field, 'foo', 'bar');
SELECT @id := MAX(table.uid) AS uid FROM table;
UPDATE copy SET copy.uid = (@id:=@id+1);
INSERT INTO table SELECT * FROM copy;
COMMIT;
这在MySQL工作台中完美运行。然后我通过Sails.js运行查询(使用sails-mysql适配器),但是我收到错误:
{ Error: ER_PARSE_ERROR: 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 IF NOT EXISTS copy AS SELECT * FROM table WH' at line 1
我已将查询记录到控制台,看起来很好。为什么会这样?
这是帆的代码:
copyTo: function (req, res) {
var from = req.param('from', '');
var to = req.param('to', '');
if (from === '' || to === '') {
res.send('from and to are required');
}
var query = 'START TRANSACTION; CREATE TEMPORARY TABLE IF NOT EXISTS copy AS SELECT * FROM table WHERE table.field = \'' + from + '\'; UPDATE copy SET copy.field = REPLACE(copy.field, \'' + from + '\', \'' + to + '\'); SELECT @id := MAX(table.uid) AS uid FROM table; UPDATE copy SET copy.uid = (@id:=@id+1); INSERT INTO table SELECT * FROM copy; COMMIT;';
Model.query( query, function (err, items) {
if (err) {
console.log(err);
res.send(400);
} else {
res.send('ok');
}
});
},
结果本质上是重新插入原始表的临时表的副本,字段属性已更改
答案 0 :(得分:0)
我最终只是制作了一个存储过程并从sails中调用它
答案 1 :(得分:-1)
Sail仅适用于一个声明 var query ='START TRANSACTION'; Model.query(query,function(err,items){ ... });
更好地使用asyn.waterfall进行其他语句查询