Nodejs mssql / msnodesqlv8问题在数据库请求中发送分号

时间:2019-05-21 19:59:17

标签: javascript node.js sql-server database

尝试构建基本的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 };

1 个答案:

答案 0 :(得分:0)

我可以通过编辑库来解决此问题。

在./lib/msnodesqlv8.js中,您可以找到连接查询字符串的位置

...  }

    if (input.length) command = `declare ${input.join(',')} ${sets.join(';')};${command};`
    if (output.length) {
      command += `select ${output.join(',')};`
      handleOutput = true
    }

....

对此进行编辑将允许您控制流程。