【问题标题】:MSSQL Insert Index as hintMSSQL 插入索引作为提示
【发布时间】:2021-07-21 10:51:23
【问题描述】:

当前我正在修补一些 mssql 和一个朋友创建的数据库。除了一个插入语句外,一切正常。

我试图从前端获取数据并将其放入表中。在稍微修改并失败后,我陷入了以下错误。

Incorrect syntax near 'INDEX'. 
If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required.

我的插入语句如下所示。

INSERT INTO TestTable (SomeID,PointID) VALUES (?,?) WITH Index(?)'

那个?是占位符,因为我使用 Python Lib (PyODBC) 进行此操作

干杯!

【问题讨论】:

  • 这样插入时指定和索引是没有意义的。你到底想达到什么目的?即您认为此声明与简单的INSERT INTO TestTable (SomeID,PointID) VALUES (?,?); 有何不同
  • 问题是我实际上需要声明一个索引,因为它不是简单地计数。所以索引看起来像 1,2,3,2,3,1 。我也尝试过 INSERT INTO TestTable (SomeID,Index,PointID) VALUES (?,?,?)' 的声明。但这会导致同样的错误。
  • Index 是 SQL Server(以及我所知道的所有其他 DMBS)中的保留字,因此您需要使用 [] 来区分列名 Index 和关键字Index,即INSERT INTO TestTable (SomeID,[Index],PointID) VALUES (?,?,?)。通常最好避免使用保留字或特殊字符来命名任何对象,因为这会导致类似这样的问题。
  • @GarethD 这是错误谢谢 :) 介意将其发布为答案,以便我可以将其标记为解决方案?

标签: sql-server pyodbc


【解决方案1】:

Index 是 SQL Server(以及我所知道的所有其他 DMBS)中的保留字,因此您需要使用 [] 来区分列名 Index 和关键字 Index,即

INSERT INTO TestTable (SomeID,[Index],PointID) VALUES (?,?,?). 

避免使用保留字或特殊字符命名任何对象通常是个好主意,因为这会导致完全类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多