我正试图通过使用带有许多插入语句的.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错误:('HY090','[HY090][Microsoft][ODBC驱动程序管理器]无效字符串或缓冲区长度(0)(SQLExecDirectW)')
- Python:3
- pyodbc:4.0.17
- 操作系统:Windows 10
- 数据库:Microsoft SQL Server
- 驱动程序:["SQL Server","SQL Server Native Client 11.0","用于SQL Server的ODBC驱动程序13","用于SQL Server的ODBC驱动程序17"]
我尝试使用上述驱动器进行连接。但我在所有驱动程序选项中都遇到了相同的错误。我正在本地计算机上运行以连接Microsoft SQL server。
当我开始阅读这个问题时,我在微软下找到了一些文件,上面写着:
https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbindparameter-function?view=sql-服务器-2017
HY090|无效字符串或缓冲区长度|(DM)BufferLength中的值小于0。(请参阅SQLSetDescField中的SQL_DESC_DATA_PTR字段的说明。)
https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqlsetdescfield-function?view=sql-服务器-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)
尝试删除"GO",因为在这种情况下应该没有必要。