2017-09-14 3 views
0

I 다음 쿼리는 내가 같은 테이블에 일부 행을 복사 할 수 있습니다Sails.js/워터 원시 SQL 쿼리 구문 오류를보고

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:[email protected]+1); 
INSERT INTO table SELECT * FROM copy; 
COMMIT; 

이 MySQL의 워크 벤치에서 완벽하게 작동 . 나는 그 (돛-MySQL의 어댑터 사용) Sails.js를 통해 쿼리를 실행하지만 오류 얻을 :

{ 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:[email protected]+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

당신이 당신의 Sails.js 코드와 기록 쿼리 결과를 게시 할 수 있습니까? – riza

+0

@riza가 – anthozep

+0

[mysql-doc] (https://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html) 코드를 추가 한 경우 쿼리를 'DELIMITER + \ n {your-sql-here} \ n +' – birdspider

답변

-1

항해에만 작업을 하나 개의 문장 VAR 쿼리에 대한 = 'START TRANSACTION'; Model.query (query, function (err, items) { ... }); 나는 결국 다른 문 쿼리

0

단지 저장 프로 시저를 만들고 돛에서 호출에 대한

더 나은 사용 asyn.waterfall