Db lib error message 20018
Привет
Мне было интересно, не могли бы вы помочь. Пытаюсь использовать tds_fdw для связи с базами данных SQL Server 2016 и 2014. Одно из них закодировано в UTF-16 и, я полагаю, содержит нулевые символы. Мы получаем следующую ошибку при попытке запросить созданное нами представление. Я использую Postgresql 9.6.
ОШИБКА: Ошибка DB-Library: DB #: 20018, сообщение DB: Общая ошибка SQL Server: проверка сообщений с сервера SQL, OS #: -1, сообщение OS: (null), Уровень: 14
********** Ошибка **********
ОШИБКА: Ошибка DB-Library: DB #: 20018, сообщение DB: Общая ошибка SQL Server: проверка сообщений с сервера SQL, OS #: -1, сообщение OS: (null), уровень: 14
Состояние SQL: HV00L
Есть мысли о том, как это решить. Я использую tds 1.0.8 – также пробовал 2.0.0 alpha и получаю ту же версию. Запущена версия 1.0 free_tds.
Я не использую DSN для сервера, но создаю сервер непосредственно в postgres.
Был бы очень признателен за вашу помощь.
Ответ
Когда вы видите сообщение, подобное этому:
ERROR: DB-Library error: DB #: 20018, DB Msg: General SQL Server error: Check messages from the SQL Server, OS #: -1, OS Msg: (null), Level: 14
Это означает, что удаленный сервер по какой-либо причине отклонил запрос. Обычно вы можете получить больше информации, установив для внешнего сервера msg_handler значение notice.
ALTER SERVER svr
OPTIONS (ADD msg_handler ‘notice’);
Похоже, у вас нет разрешения на выполнение SET SHOWPLAN_ALL, поэтому вам придется либо запросить это разрешение для вашей учетной записи пользователя, либо установить для параметра row_estimate_method foreign table значение execute вместо showplan_all.
_mssql.MSSQLDatabaseException: (207, b”Invalid column name ‘Hello’.DB-Lib error message 20018
Я хочу вставить данные из notepad в базу данных, но возникает ошибка:
Traceback (most recent call last): File “src\pymssql.pyx”, line 448, in pymssql.Cursor.execute File “src_mssql.pyx”, line 1061, in _mssql.MSSQLConnection.execute_query File “src_mssql.pyx”, line 1092, in _mssql.MSSQLConnection.execute_query File “src_mssql.pyx”, line 1225, in _mssql.MSSQLConnection.format_and_run_query File “src_mssql.pyx”, line 1636, in _mssql.check_cancel_and_raise File “src_mssql.pyx”, line 1680, in _mssql.maybe_raise_MSSQLDatabaseException _mssql.MSSQLDatabaseException: (207, b”Invalid column name ‘Hello’.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n”
Содержимое a 20180605_dict.txt:
Привет: a1:a1:0.999979
Большой: a2:a2:0.999645
Apple: a3:a3:0.999486
Структура таблицы report_pn_dictionary:
CREATE TABLE [dbo].[report_pn_dictionary](
[dict_keyword] [nvarchar](50) NOT NULL,
[dict_pn] [decimal](18, 10) NULL,
[registered] [datetime] NULL,
[modified] [datetime] NULL
)
Где ошибка?Как это исправить?
Ответ
Вы преобразовывали таблицу данных CSV странным образом. Наиболее важной ошибкой является то, что SQL-запрос заключает значения в кавычки (следовательно, ‘Hello’ является ошибкой недопустимого столбца). Я перекодировал фрагмент, чтобы вы могли видеть каждое изменение, комментарий и обновление; Надеюсь, я помог. Удачи!
Я упростил преобразование данных с помощью zip, объединив два экземпляра List (одинаковой длины), созданных из csv_data столбца и строки.
Закодировано в Python 3.6.4
Исправлен вывод запроса
INSERT INTO report_pn_dictionary (dict_keyword, dict_pn)
VALUES(“Hello”, “0.9999790000000001”)