【问题标题】:Insert Error 'Incorrect Syntax Near @P26' When Adding New Column and Inserting添加新列和插入时插入错误“@P26 附近的语法不正确”
【发布时间】:2017-05-04 16:07:11
【问题描述】:

我一直遇到错误,似乎无法在线找到任何解决方案。我目前有一个包含 36 列的 SQL,并且正在使用删除语句,然后每天通过 CSV 和 python 程序插入新值。这是一个基本的 Insert Into 语句,它利用 python for 循环插入 CSV 中的所有行。

我刚刚在 SQL 表和 python 程序中的 insert 语句中添加了一个新列(我过去曾多次对同一个表执行此操作),但是每当我使用新的 insert 语句程序时,我都会得到以下信息错误:

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server 
Driver][SQL Server]Incorrect syntax near '@P26'. (102) (SQLExecDirectW); 
[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could 
not be prepared. (8180)")

我假设“@P26”指的是某个参数,但我没有使用任何 SQL 参数。下面是我的 Python / SQL 代码的 sn-p:

SQL = """insert into example_table(   [Column_1],
                                      [Column_2],
                                      [Column_3],
                                      [Column_4],
                                      [Column_5],
                                      [Column_6],
                                      [Column_7],
                                      [Column_8],
                                      [Column_9],
                                      [Column_10],
                                       ....
                                      [Column_36],
                                      [New Column] 

                                             ) values (?,?,?,?,?,?,?,?,?,?,?,?,                                                            
                                                      ?,?,?,?,?,?,?,?,?,?,?,?,
                                                        ?,?,?,?,?,?,?,?,?,?,?,?,?)"""

cursor2.execute("delete example_table")
for row in csv_data:
   cursor2.execute(SQL, row)

非常感谢您的帮助,我完全陷入困境。对不起,代码中的奇怪缩进。 (注意:我知道语法是正确的,因为它在我删除新列和参数标记并重新运行时有效)。

【问题讨论】:

  • 最有可能的答案是您的字符串或生成的 SQL 在某些时候被截断......在未显示的任何代码中是否存在字符串长度限制?还是在您调用的底层库/API 中?
  • 奥斯汀感谢您的回复。我实际上考虑过这一点,因此我将要插入的新列的 varchar 限制设置为最大值。话虽如此,它将达到的最大字符数为 8。就 pyodbc 库而言,我从未遇到任何问题。在任何情况下,表中已经存在的许多列的长度都远大于新列。
  • 不,我说的是持有您正在传递给 SQL Server 的 SQL 的字符串。该错误消息似乎表明 SQL 字符串本身正在被截断,因此当它变得太长时会导致语法错误。
  • 你的意思是python字符串本身吗?这个线程似乎暗示 python 字符串的最大值是几十或几百 GB:stackoverflow.com/questions/1739913/… 除非它被 ODBC 驱动程序截断? @ls101 您的查询在 SSMS 中有效吗?
  • 你能用分析器检查服务器发生了什么吗?你可能会发现你的 SQL 到底出了什么问题

标签: python sql-server parameters sql-insert pyodbc


【解决方案1】:

这是一个语法问题,请检查您的“?”第 26 个值。这发生在我身上,我有这样的语法:


.... ?,?,?.?)


这是我的第 23 个值,错误告诉我@P23。 资料来源:exp。

【讨论】:

  • 这显然不是正确的答案。带问号的块中没有冒号。
  • 我的代码中第 25 个和第 26 个问号之间缺少一个逗号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多