Node.js Проблема с одинарными кавычками SQL Server с подготовленным запросом

#node.js #sql-server

Вопрос:

Я пытаюсь извлечь данные из базы данных SQL Server с помощью node.js, и передача данных в чат-бота Google.

Вот как выглядит мой запрос SQL Server

 INSERT INTO @Return
    SELECT 'You'   ''   've assigned '   CONVERT(varchar(4), COUNT(1))   ' to yourself'
 

Это функция, которая отправляет данные в чат-бота Google.

 function GbWebhookFunction(){

    this.sendMessage = async function(strMessage){
        console.log(strMessage);
        fetch(webhookURL, {
            method: 'POST',
            headers: {
            'Content-Type': 'application/json; charset=UTF-8',
            },
            body: "{'text': '"   strMessage   "'}",
        }).then((response) => {
            console.log(response);
        });
    };
};
 

Это выводит:

 Youve assigned X to yourself
 

Я попытался добавить в свою функцию приведенный ниже код, но это не сработало.

 strMessage = strMessage.replace("", "'");
 

Я удалил один из своих SQL — запросов, но он вывел:

 Youe assigned X to yourself
 

Выводится при удалении из SQL-запроса

Есть какие-нибудь идеи о том, как я могу заменить его одной цитатой?

Комментарии:

1. Я предлагаю вам попробовать реализовать собственные методы побега. Например, вот как вы вставляете цитату в SQL: SELECT 'You''ve assigned' . Теперь у вас есть именно та строка, которую вы хотите получить из SQL, вам нужно решить, как сохранить ее в javascript.

Ответ №1:

В своем запросе вы забыли добавить единственную цитату. Запрос, скорее всего, должен быть

 INSERT INTO @Return
    SELECT 'You've assigned '   CONVERT(varchar(4), COUNT(1))   ' to yourself'
 

Редактировать

Основываясь на некоторых приведенных ошибках, я бы вместо этого предложил использовать двойные одинарные кавычки. Это означает, что SQL-запрос должен быть следующим:

 INSERT INTO @Return
    SELECT 'You''ve assigned '   CONVERT(varchar(4), COUNT(1))   ' to yourself'
 

Комментарии:

1. Подсветка, используемая переполнением стека, на самом деле не любит экранирования, однако это допустимо.

2. Когда я вставляю это в SSMS и запускаю его, я получаю Msg 102, уровень 15, Состояние 1, Строка 1 Неверный синтаксис рядом с «назначено». Msg 105, Уровень 15, Состояние 1, Строка 1 Незакрытая кавычка после символьной строки «.

3. Я внес правку. По-видимому, mariadb обрабатывает побеги иначе, чем mysql

4. Поскольку это для SQL Server, я не уверен, какое отношение имеют mariadb и mysql.

5. Последнее редактирование было скорректировано с учетом совместимости с MySQL, я изначально просто предположил, что mariadb унаследовал цитату, вырвавшуюся из MySQL