尝试构建基本的API以使用Node.js与MSSQL v12数据库进行交互。我已经可以使用mssql / msnodesqlv8程序包连接到数据库,但是参数化查询因以下原因而失败。
代码:“ EREQUEST”, 数:102, 状态:未定义, originalError: {错误:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]“”附近的语法不正确。 sqlstate:“ 42000”,代码:102}, 名称:“ RequestError”} 调试:内部,实现,错误
我使用了SQL Server Profiler,看到查询就是这样
exec sp_executesql N'声明@SecurityKey nvarchar(MAX);设置@ SecurityKey = @ P1; exec database.getSecurityBySecurityId @SecurityKey;',N'@ P1 nvarchar(20)',N'XXXXXXXX'
并且失败。经过一番调查后,在声明和设置语句之后,分号似乎是一个问题,因为TSQL不允许使用分号(对于MSSql来说,这是很新的,将需要读取)。当我手动运行查询时,删除分号确实可以解决问题。
所以我的问题是..有没有一种方法可以使msnodesqlv8在我的| Mssql版本上工作,如果可以,怎么办?有没有办法忽略这些分号。
如果您认为有更好的方法,我想听听它,因为我是Nodejs + MSSql的新手。
getSecurity.sql的内容
exec database.getSecurityBySecurityId @SecurityKey
index.js的内容
"use strict";
const utils = require("../utils");
const api = async ({ sql, getConnection }) => {
const sqlQueries = await utils.loadSqlQueries("events");
const getSecurity = async SecurityKey => {
const cnx = await getConnection();
const request = await cnx.request();
request.input('SecurityKey', SecurityKey);
return request.query(sqlQueries.getSecurity);
};
return {
getSecurity
};
};
module.exports = { api };
答案 0 :(得分:0)
我可以通过编辑库来解决此问题。
在./lib/msnodesqlv8.js中,您可以找到连接查询字符串的位置
... }
if (input.length) command = `declare ${input.join(',')} ${sets.join(';')};${command};`
if (output.length) {
command += `select ${output.join(',')};`
handleOutput = true
}
....
对此进行编辑将允许您控制流程。