Попытка создать базовый API для взаимодействия с базой данных MSSQL v12 с помощью Nodejs. Мне удалось подключиться к базе данных с помощью пакета mssql / msnodesqlv8, но параметризованные запросы не выполняются со следующим:
код: 'EREQUEST',
номер: 102,
состояние: не определено,
originalError:
{Ошибка: [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Неверный синтаксис рядом с ''. sqlstate: '42000', код: 102},
name: 'RequestError'}
Отладка: внутренняя, реализация, ошибка
Я использовал SQL Server Profiler и увидел, что запрос поступает как таковой
exec sp_executesql N'declare @SecurityKey nvarchar (MAX); set @ 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 };