ошибка команды where при запросе в БД sql из 1c
Добрый день
направляю запрос (ниже) - запрос работает. Требуется поставить условие
Пытаюсь поставить условие - например вот так |where $csp_shift_number='2717' - ошибка
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'where'.
В чем может быть ошибка?
Из внешней обработки 1с 83. направляю запрос в БД sql
//Инициализация переменных
ИмяСервераSQL = "***";
ПользовательSQL = "***";
ПарольSQL = "***";
БазаДанныхSQL = "***";
/////////////////////////////////////////
//Подключение к SQL-серверу
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
Выборка = Новый COMОбъект("ADODB.RecordSet");
Соединение.ConnectionString =
"driver={SQL Server};" +
"server="+ИмяСервераSQL+";"+
"uid="+ПользовательSQL+";"+
"pwd="+ПарольSQL+";"+
"database="+БазаДанныхSQL+";";
Соединение.ConnectionTimeout = 30;
Соединение.CommandTimeout = 600;
//Открытие соединение
Соединение.Open();
Команда.ActiveConnection = Соединение;
Сообщить("Успешное подключение!");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТаблицаSQL = "consolidated_shift_pos_report";
ТекЧисло = "109713";
ТекстИнструкции =
"SELECT top 10000
| trf_id, fsh_id, csp_shift_number
|FROM
// |where trf_id = '"+ТекЧисло+"'
// |where $csp_shift_number='2717'
|"+ТаблицаSQL;
//(CAST(Номенклатура._Folder AS int)=1)
// |where CAST(trf_id as int)='109713' "+ТаблицаSQL;
Попытка
Команда.CommandText = ТекстИнструкции;
// Param1 = Соединение.CreateParameter(ТекЧисло);
// Соединение.Parameters.Append(Param1);
Выборка = Команда.Execute();
Если Выборка.BOF = Ложь Тогда
Выборка.MoveFirst();
Пока Выборка.EOF = Ложь Цикл
Сообщить("[trf_id]="+Выборка.Fields("trf_id").Value
+", [fsh_id]="+Выборка.Fields("fsh_id").Value
+", [csp_shift_number]="+Выборка.Fields("csp_shift_number").Value);
Выборка.MoveNext();
КонецЦикла;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Соединение.Close();
Сообщить("Соединение закрыто!");
направляю запрос (ниже) - запрос работает. Требуется поставить условие
Пытаюсь поставить условие - например вот так |where $csp_shift_number='2717' - ошибка
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'where'.
В чем может быть ошибка?
Из внешней обработки 1с 83. направляю запрос в БД sql
//Инициализация переменных
ИмяСервераSQL = "***";
ПользовательSQL = "***";
ПарольSQL = "***";
БазаДанныхSQL = "***";
/////////////////////////////////////////
//Подключение к SQL-серверу
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
Выборка = Новый COMОбъект("ADODB.RecordSet");
Соединение.ConnectionString =
"driver={SQL Server};" +
"server="+ИмяСервераSQL+";"+
"uid="+ПользовательSQL+";"+
"pwd="+ПарольSQL+";"+
"database="+БазаДанныхSQL+";";
Соединение.ConnectionTimeout = 30;
Соединение.CommandTimeout = 600;
//Открытие соединение
Соединение.Open();
Команда.ActiveConnection = Соединение;
Сообщить("Успешное подключение!");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТаблицаSQL = "consolidated_shift_pos_report";
ТекЧисло = "109713";
ТекстИнструкции =
"SELECT top 10000
| trf_id, fsh_id, csp_shift_number
|FROM
// |where trf_id = '"+ТекЧисло+"'
// |where $csp_shift_number='2717'
|"+ТаблицаSQL;
//(CAST(Номенклатура._Folder AS int)=1)
// |where CAST(trf_id as int)='109713' "+ТаблицаSQL;
Попытка
Команда.CommandText = ТекстИнструкции;
// Param1 = Соединение.CreateParameter(ТекЧисло);
// Соединение.Parameters.Append(Param1);
Выборка = Команда.Execute();
Если Выборка.BOF = Ложь Тогда
Выборка.MoveFirst();
Пока Выборка.EOF = Ложь Цикл
Сообщить("[trf_id]="+Выборка.Fields("trf_id").Value
+", [fsh_id]="+Выборка.Fields("fsh_id").Value
+", [csp_shift_number]="+Выборка.Fields("csp_shift_number").Value);
Выборка.MoveNext();
КонецЦикла;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Соединение.Close();
Сообщить("Соединение закрыто!");
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
хмм. Если перевести в аналогии запроса 1С получиться:
Где что-то
Где что-то другое
Секция Где (where) должна быть одна. Ну и про символ $ уже сказали.
Используйте And
|where trf_id = '"+ТекЧисло+"'
|and csp_shift_number='2717'
// |where trf_id = '"+ТекЧисло+"'
// |where $csp_shift_number='2717'
// |where $csp_shift_number='2717'
хмм. Если перевести в аналогии запроса 1С получиться:
Где что-то
Где что-то другое
Секция Где (where) должна быть одна. Ну и про символ $ уже сказали.
Используйте And
|where trf_id = '"+ТекЧисло+"'
|and csp_shift_number='2717'
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот