2014-10-21 4 views
0

Так я использую модуль узла под названием JSON-SQL https://github.com/2do2go/json-sqlSQL заявление не имеет смысла

, но конечный результат будет

sql.query 
// insert into users (name, lastname, age, gender) values ($p1, $p2, 24, $p3); 

sql.values 
// { p1: 'John', p2: 'Snow', p3: 'male' } 

Есть быстрый способ сделать что SQL читаемым ? Я хотел бы иметь кучу этих утверждений и сделать это в файле .sql, который будет запущен на сервере sql позже.

ответ

0

К сожалению, библиотека неспособна изначально выводить exceuable MS SQL-совместимые операторы.

действительный MS SQL подготовленный оператор будет выглядеть следующим образом:

sp_EXECUTEsql @statement=N'Select @p as t', @parameters = N'@p varchar(50)', @p=N'Test' 

Так что в этом случае вы хотите сделать три вещи:

  1. Использование options параметр библиотеки, чтобы установить ValuesPrefix до @, а не по умолчанию $
  2. Напишите какой-то метод для получения результата sql.values и сгенерируйте как значение для @parameters выше, а также каждое отдельное значение параметра.
  3. Объедините все части вместе в заявление, напоминающее вышеприведенное.
-1

Модуль, очевидно, намерен вставить значения, описанные ассоциативным массивом sql.values, в строку запроса по sql.query. В результате для тех, кто особенно sql.query и sql.values бы

insert into users (name, lastname, age, gender) values ('John', 'Snow', 24, 'male') 

Это похоже по внешнему виду, но различные по реализации от концепции «подготовленное заявление» присутствует во многих программных интерфейсов баз данных.

+0

Обратите внимание, что SQL требует дефисов вокруг строковых литералов, как показано, так что это не прямая интерполяция строк. –

+0

Это не то, как работает модуль, вы передаете ему объект запроса MongoDB и он возвращает sql.query и sql.values, которые вы должны затем построить в свой собственный вызов базы данных. Таким образом, вы передадите SQL.query и SQL.values ​​через провод к некоторой службе, и он подготовит их, выполнит их и вернет данные. –

+0

@KyleHale Спасибо за разъяснение. Однако модуль работает, однако, вопрос заключается в том, какой запрос был представлен предоставленными данными. Я представил этот запрос и описал, как он поступает от данных. Тем не менее, я обновил свой ответ, чтобы уточнить, что именно пользователь, а не модуль, должен сконструировать запрос из данных. –

0

Похоже, что вы можете использовать опцию separatedValues: false, чтобы получить простой sql-запрос без заполнителей.

Например, в вашем случае:

var jsonSql = require('json-sql')({separatedValues: false}); 

sql.query 
// insert into "users" ("name", "lastname", "age", "gender") values (\'John\', \'Snow\', 24, \'male\'); 

Тогда вы просто должны заменить символы, которые вы не хотите (двойные кавычки, например);

Я надеюсь, что кто-нибудь найдет это полезным.

Смежные вопросы