2017-10-04 85 views
0

後,我的工作的MongoDB和SQL Server之間的整合,將與計劃的過程中,從MongoDB的更新寄存器到SQL Server數據庫,使用mssql包來實現這一目標。節點MSSQL:返回ID SQL插入

每一個新的寄存器被插入的時候,我希望新的行ID被檢索回來,因爲我需要它來執行subregisters的另一個插入。

我嘗試了以下操作,期望在查詢結果中檢索到一些信息。查詢實際插入的行,但result返回爲undefined

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?

編輯

我沒有包括OUTPUT SCOPE_IDENTITY()在我的SQL語句 - 我的查詢現在看起來像:

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

如果我跑在我的SQL Server Management Studio中的查詢,它工作得很好,我得到我的新行ID返回,但通過mssql程序包的query方法運行查詢時,result這樣返回:

[ { '': null } ] 

回答

1

我從node-mssql insert returning undefined recordset引用:

INSERT語句不返回記錄集這樣recordset是 不確定。請參閱文檔的​​以瞭解有關如何獲取受影響行數的更多 。

來解決這方面的一個選項是你INSERT後添加SELECT聲明,並要求SCOPE_IDENTITY()@@IDENTITY。這將得到你最後插入的對象的ID,即:INSERT INTO table (...) VALUES (...); SELECT SCOPE_IDENTITY() AS id;

+0

感謝弗朗西斯科,這就是我現在正在做的,我查詢INSERT INTO TABLE(列...)OUTPUT SCOPE_IDENTITY()VALUES(值...)',但現在我得到'[{'':null}]'作爲我操作的結果。 (見後期版) –

+0

正如你所說,正確的querry是'INSERT INTO TABLE(columns ...)VALUES(values ...)SELECT SCOPE_IDENTITY()作爲id',具有'result''[{'id': 12345}]'再次感謝! –