2017-10-04 11 views
0

Mongodb와 SQL Server 간의 통합 작업을 위해 MongoDb에서 SQL Server 데이터베이스로 레지스터를 업데이트하고 예약 된 프로세스로 mssql 패키지를 사용하여이를 수행합니다.노드 mssql : SQL 삽입 후 ID 반환

새 레지스터를 삽입 할 때마다 새 행 ID를 다시 검색해야합니다. 서브 레 그에 대한 다른 삽입을 수행해야하기 때문입니다.

다음과 같이 쿼리 결과에서 일부 정보가 검색 될 것으로 예상됩니다. 쿼리는 실제로 행을 삽입하지만, resultundefined로 반환됩니다

var sql = require('mssql'); 
var connectionConfig = 'xxxxxxxxxxxx'; 
var insertionQuery = 'xxxxxxxxxxxx'; 

sql.connect(connectionConfig).then(pool => { 
    pool 
     .request() 
     .query(insertionQuery);  

}).then(result => { 
     //I expect 'result' to have information of the inserted row, but it comes undefined instead 
     cosole.log(result); 

}).catch(err => { 
     console.err(err); 
}); 

내가 저장 프로 시저를 사용하여이 문제를 해결 할 수 있다고 생각하지만, 난 그냥 간단하게 삽입을위한 저장 프로 시저를 사용하지 않도록합니다.

누구든지 삽입 후 새 행 ID를 다시 가져 오는 방법을 알고 있습니까?

편집

내 SQL 문에 OUTPUT SCOPE_IDENTITY()을 포함 않았다 -처럼 내 쿼리가 지금 보이는 : 내 SQL Server 관리 Studio에서 쿼리를 실행하면

INSERT INTO TABLE (columns...) 
OUTPUT SCOPE_IDENTITY() 
VALUES (values...) 

, 그것은 잘 작동하고 새 행 ID가 반환되었지만 mssql 패키지의 query 메서드를 통해 쿼리를 실행할 때

메서드가 반환됩니다.

답변

1

나는 node-mssql insert returning undefined recordset에서 인용 :

INSERT 문은 레코드 집합을 반환하지 않습니다 그래서 recordset가 정의되지 않은 입니다. 영향을받는 행 수를 얻는 방법에 대해서는 에 대해 자세히 알아 보려면 문서의 this section을 참조하십시오.

이 문제를 해결 할 수있는 옵션은 INSERTSELECT 문을 추가하고 SCOPE_IDENTITY() 또는 @@IDENTITY을 요청하는 것입니다. 그러면 마지막으로 삽입 한 객체의 ID를 얻을 수 있습니다. INSERT INTO table (...) VALUES (...); SELECT SCOPE_IDENTITY() AS id;

+0

감사합니다. Francisco 님, 지금 내가하고있는 일은 'INSERT INTO TABLE (columns ...) OUTPUT SCOPE_IDENTITY() VALUES (values ​​...)',하지만 지금은'{{ '': null}]'을''결과''로 사용하고 있습니다. (게시판 참조) –

+0

당신이 말했듯이, 정확한 querry는'result {'{ ''id ':를 가지는} {VALUE} (values ​​...) SELECT로 SCOPE_IDENTITY 12345}]'다시 한번 감사드립니다! –