Я пытаюсь вставить данные в таблицу, используя файл .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)