Odbc sql server driver недопустимый номер параметра

Обновлено: 04.07.2024

SQL STATE 37000 [Microsoft] [драйвер ODBC Microsoft Access] Ошибка синтаксиса или нарушение прав доступа при попытке запустить встроенную инструкцию SQL на Powerscript.

Я использую MsSQL Server 2008 и PowerBuilder 10.5, ОС - это Windows 7. Я смог определить один из запросов, вызывающих проблему:

Я смог придумать решение этого, просто используя функцию datetime() PowerBuilder. Но есть другие части программы, которые вызывают это, и мне сложно определить, какая часть программы вызывает это. Я нахожу это очень странным, потому что я запускаю те же скрипты здесь, в своем dev-pc без каких-либо проблем, но при попытке запустить программу на моей клиентской рабочей станции я получаю эту ошибку. Я не нашел различий в рабочей станции и моем dev-pc . Я также пробовал следовать инструкциям здесь, но проблема все еще происходит.

UPDATE: я смог идентифицировать другой скрипт, который вызывает проблему:

Похоже, что передача данных datetime приводит к ошибке выше. Другие скрипты работают нормально.

У нас есть ученик uni, который делает опыт работы на данный момент, и он делает прототип Wordpress для нас (поскольку у нас нет опыта Wordpress или PHP).

Он работает на сервере Windows, а сам Wordpress работает в mySQL, так как все наши существующие базы данных находятся в MS SQL Server 2005/2008, и он пытается вызвать хранимую процедуру на php-странице, используя этот код:

Хранимая процедура выглядит следующим образом:

Как ни странно, если мы переименуем вызов процедуры к несуществующей хранимой процедуре, то ошибки с точно такой же вещью, а не с хранимой процедурой, не могут быть найдены в виде ошибки.

Мы можем запускать sql напрямую, то есть "select * from etc", и он будет возвращать данные, но мы не можем вызывать хранимые процедуры (которые мы используем для всего, конечно!).

Драйвер ODBC по умолчанию - AdventureWorks2012. Я вижу, что набор данных просто прекрасен, и, например, следующий код работает без проблем:

С другой стороны, работает

Кроме того, я сфокусирован на WHERE (0 = 1) : не могу понять, откуда она взялась .

(1) Таблица существует в базе данных. (2) Я присвоил имя правильной Схеме. (3) Я установил базу данных по умолчанию в ODBC для AdventureWorks2012.

Буду признателен за вашу помощь и понимание. Благодарю вас.

Я столкнулся с этой же проблемой и нашел ответ в документации по dbplyr:

Тем не менее, "производство" здесь специфично для вашей базы данных.

Мне потребовалось некоторое время, чтобы выяснить, как называлось мое имя схемы, но оказалось, что это было просто имя базы данных. Так что, может быть, вы могли бы попробовать

ответил(а) 2019-01-08T22:16:00+03:00 2 года, 9 месяцев назад

Поскольку AdventureWorks не поддерживает схему по умолчанию (т. odbc::dbId Нет dbo ), рассмотрите возможность использования odbc::dbId для правильного выбора таблицы в такой схеме, как показано в этом комментарии к выпуску Git:

ПРИМЕЧАНИЕ. Поддержка схем относительно новая для пакета odbc для одного из авторов всего за 15 дней назад. Возможно, вам придется переустановить версию разработки Git, если версия CRAN слишком старая.

Я обнаружил, что получаю эту ошибку, когда использую строку подключения с параметром "Initial Catalog = dbname" вместо "Database = dbname":

В этом разделе обсуждаются значения SQLSTATE для ODBC 3. x. Дополнительные сведения об ODBC 3. значения x SQLSTATE см. в разделе сопоставления SQLSTATE.

SQLGetDiagRec или SQLGETDIAGFIELD возвращает значения SQLSTATE в соответствии с определением Open Group Управление данными: язык SQL (SQL), версия 2 (март 1995). Значения SQLSTATE — это строки, содержащие пять символов. В следующей таблице перечислены значения SQLSTATE, которые драйвер может вернуть для SQLGetDiagRec.

Символьная строка, возвращаемая для SQLSTATE, состоит из значения класса из двух символов, за которым следует значение подкласса из трех символов. Значение класса "01" указывает на предупреждение и сопровождается кодом возврата SQL_SUCCESS_WITH_INFO. Значения класса, отличные от "01", за исключением класса "IM", указывают на ошибку и могут сопровождаться возвращаемым значением SQL_ERROR. Класс IM характерен для предупреждений и ошибок, производных от реализации самого ODBC. Значение подкласса "000" в любом классе указывает на отсутствие подкласса для этого SQLSTATE. Назначение значений класса и подкласса определяется SQL-92.

Хотя успешное выполнение функции обычно обозначается возвращаемым значением SQL_SUCCESS, 00000 SQLSTATE также указывает на успех.

Читайте также: