gpt4 book ai didi

sql - 简单的 SELECT 语句失败 "syntax to use near"、 "ORA-00906"、 "syntax error at or near"或 "syntax near the keyword"

转载 作者:行者123 更新时间:2023-12-01 07:06:59 25 4
gpt4 key购买 nike

我有一个非常简单的 SQL 语句

SELECT * FROM Table;

但是,我的查询引擎返回一个语法错误。为什么?

错误详情:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in >System.Data.dll

Additional information: Incorrect syntax near the keyword 'Table'.



这怎么可能?我检查了连接字符串,它是正确的。
我检查了我的表名,它也是正确的。

我做错了什么?

最佳答案

好的,Table是所有 SQL 变体中的保留关键字。

如果要叫表Table ,并在语句中使用它,你必须告诉你的 sql 引擎它是一个标识符。为此,您需要使用 标识符限定符 .

用于 (MS SQL Server) TSQL 使用方括号

SELECT * FROM [Table];

对于 MySQL 使用`
SELECT * FROM `Table`;

适用于 Oracle 和 PostgreSQL 使用引号,
这些都是符合标准的。
SELECT * FROM "Table";

SQLite 您可以使用上述任何一种,但最好使用引号。

标识符限定符告诉引擎这是一个标识符(对象的名称)。不是关键字的名称,即使它们碰巧相同。如果没有您的指导,查询引擎可能会感到困惑并报告错误,或者更糟糕的是,会做一些意想不到的事情。

使用标识符限定符是一种很好的做法 ,即使标识符不是关键字。
他们更好地为所有解析器定义语句,包括肉体。

在关键字之后命名对象通常被认为是不好的做法。所以你应该尽量避免使标识符与关键字相同。保留关键字描述表格内容的情况很少见,请参阅脚注。

例如你的 table 不是 Table的表。

问题和建议不限于 Tables , 包括 Schema 在内的所有数据库对象都需要标识符, Views以及存在的许多类型,标准的和特定于供应商的。

另一种良好实践的形式是前缀 Table带有 Schema 的标识符标识符,这对查询引擎有一点帮助。
当包括 Schema标识符,标识符应该是合格的,

用于 (MS SQL Server) TSQL 使用方括号
SELECT * FROM [dbo].[Table];

对于 MySQL 使用`
SELECT * FROM `dbo`.`Table`;

适用于 Oracle、PostgreSQL 和 SQLite 使用引号
SELECT * FROM "dbo"."Table";

即使您的 Schema不是以关键字命名的,应该如此。

供您引用,帮助您避免冲突。

TSQL Reserverd Keywords名单.

MySQl Reserved Keywords名单.

Oracle Reserved Keywords名单.

SQLite Reserved Keywords名单.

PostgreSQL Reserved Keywords名单.

值得注意的“陷阱”包括 USERERROR ,这似乎是在设计系统时出现的。

脚注:

在某些情况下,对对象名称使用保留词可能在语义上是正确的。

考虑一个为家具店设计的信息系统示例。在这种情况下,一张 table (厨房、花园、餐厅、药剂师等)可能是正确的。所以,你可以争论 Table是正确的标识符。

如果你总是使用标识符限定符,你就不会被烧毁。

关于sql - 简单的 SELECT 语句失败 "syntax to use near"、 "ORA-00906"、 "syntax error at or near"或 "syntax near the keyword",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com