HY090 - неверная длина строки или буфера (0) - PullRequest
0 голосов
/ 11 февраля 2019

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

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

INSERT [dbo].[table_name] ([col1], [col2], [col3], [col4], [col5], [col6], [col7], [col8], [col9], [col10], [col11], [col12], [col13], [col14], [col15], [col16], [col17], [col18], [col19], [col20], [col21], [col22], [col23], [col24], [col25]) VALUES (N'01111', N'SOME RANDOM NAME', N'ABCDE', N'Times', N'ABCD', N'0#aa:', N'06', N'SM', N'123 Cerfdty', N'NULL', N'SM', N'NULL', N'NULL', N'000', N'o2:aq', N'wef0', N'000', N'xx:xx', N'xxxxx', N'ZM', NULL, NULL, NULL, NULL, NULL)
GO

Каждый оператор выполняется индивидуально и фиксируется послечто при чтении файла.

Но после выполнения около 240 операторов вставки я получаю следующую ошибку:

pyodbc.Error: ('HY090', '[HY090] [Microsoft] [Диспетчер драйверов ODBC] Неверная длина строки или буфера (0) (SQLExecDirectW) ')

  • Python: 3
  • pyodbc: 4.0.17
  • ОС: Windows 10
  • БД: Microsoft SQL Server
  • драйвер: ['SQL Server', 'Собственный клиент SQL Server 11.0', 'Драйвер ODBC 13 для SQL Server', 'Драйвер ODBC17 для SQL Server ']

Я пытался подключить вышеуказанные диски.Но я получаю ту же ошибку со всеми параметрами драйвера.Я работаю на своем локальном компьютере для подключения к серверу Microsoft SQL.

Когда я начал читать об этой проблеме, я обнаружил в Microsoft документы, в которых говорится:

https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbindparameter-function?view=sql-server-2017

HY090 |Неверная длина строки или буфера |(DM) Значение в BufferLength было меньше 0. (См. Описание поля SQL_DESC_DATA_PTR в SQLSetDescField.)

https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlsetdescfield-function?view=sql-server-2017

Для очистки буфера необходимо установить некоторый параметр Bindingно я не вижу никакой доступной информации или опций, доступных для использования в pyodbc, я думаю.

Возможно, я явно отклонился от первоначальной причины этой проблемы.

Пожалуйста, помогите мне с этой проблемой.

try:
    with open(filename,'r') as sqlfile:
        sql_query = ''
        count =0
        for line in sqlfile:
            if 'GO' in line:
                cursor.execute(sql_query)
                sql_query = ''
                conn.commit()
                count = count +1
                print(count)
            elif 'PRINT' in line:
                display = line.split("'")[1]
                print(display)
            else:
                sql_query = sql_query + line 
        sqlfile.close()
except pyodbc.ProgrammingError as error:
    print(error)
...