如何处理看起来像SQL关键字的SQL列名?

时间:2008-11-12 23:18:47

标签: sql sql-server

我的一个专栏名为from。我无法更改名称,因为我没有成功。 我是否可以执行SELECT from FROM TableName之类的操作,或者是否有特殊语法来避免SQL Server混淆?

14 个答案:

答案 0 :(得分:318)

将列名称包含在括号中,from变为[from]。

select [from] from table;

也可以使用以下内容(查询多个表时很有用):

select table.[from] from table;

答案 1 :(得分:21)

如果它在PostgreSQL中,请在名称周围使用双引号,例如:

select "from" from "table";

注意:内部PostgreSQL会自动将所有未引用的命令和参数转换为小写。这会导致命令和标识符不区分大小写。 来自tAblE的sEleCt *; 被解释为 select * from table; 。但是,双引号内的参数按原样使用,因此区分大小写:从“表格”中选择*; 从“表格”中选择*; 从中获取结果两个不同的表。

答案 2 :(得分:19)

当你这样做时 - 把它别名为别的(或者更好的是,使用视图或SP并弃用旧的直接访问方法)。

SELECT [from] AS TransferFrom -- Or something else more suitable
FROM TableName

答案 3 :(得分:10)

您的问题似乎在这里得到了很好的解答,但我只是想在此主题中再添加一条评论。

设计数据库的人应该清楚地知道保留的关键字并避免使用它们。如果您发现有人使用它,请以相关的方式通知他们(以礼貌的方式)。这里的关键字是保留字。

更多信息:

  

“不应使用保留关键字   作为对象名称。数据库已升级   从早期版本的SQL Server   可能包含包含的标识符   早先未保留的词语   版本,但这是保留字   对于当前版本的SQL Server。   您可以使用引用该对象   直到名称的分隔标识符   可以改变。“   http://msdn.microsoft.com/en-us/library/ms176027.aspx

  

“如果您的数据库确实包含名称   匹配保留关键字,你必须   当你使用分隔标识符时   参考那些对象。更多   信息,请参阅标识符(DMX)。“   http://msdn.microsoft.com/en-us/library/ms132178.aspx

答案 4 :(得分:8)

这有两种方法:

  1. 使用后面的引用:
  2.   

    SELECT`from` FROM TableName

    1. 您可以提及表名为:
    2.   

      SELECT TableName.from FROM TableName

答案 5 :(得分:7)

如果您正在使用SQL Server,则只需将方括号括在列或表名称周围即可。

select [select]
from [table]

答案 6 :(得分:3)

在Apache Drill中,使用反引号:

<input type="hidden" name="product_custom_value[]" value="<?php echo $product->product_name ?>"/>

答案 7 :(得分:2)

您好我在完全符合ANSI标准的Teradata系统上工作。使用双引号“”来命名此类列。

E.g。 type是SQL保留关键字,在引号内使用时,type被视为用户指定的名称。

见下面的代码示例:

CREATE TABLE alpha1
AS
(
SEL
product1
type_of_product AS "type"
FROM beta1
) WITH DATA
PRIMARY INDEX (product1)

--type is a SQL reserved keyword

TYPE

--see? now to retrieve the column you would use:

SEL "type" FROM alpha1

答案 8 :(得分:2)

我也遇到过这个问题。 对此的解决方案是在查询中放置[Column_Name]。

string query= "Select [Name],[Email] from Person";

所以它会很好地运作。

答案 9 :(得分:1)

您可以将列名称放在括号中:

Select  [from] from < ur_tablename>

或者

放入临时表,然后随意使用。
例如:

Declare @temp_table table(temp_from varchar(max))

Insert into @temp_table
Select * from your_tablename

这里我假设your_tablename只包含一列(即from)。

答案 10 :(得分:1)

在尝试更新名称为关键字的列时,我遇到了同样的问题。上面的解决方案对我没有帮助。我通过简单地指定表的名称解决了这个问题:

UPDATE `survey`
SET survey.values='yes,no'
WHERE (question='Did you agree?')

答案 11 :(得分:1)

以下内容将完美运作:

SELECT DISTINCT table.from AS a FROM table

答案 12 :(得分:1)

在MySQL中,或者使用后引号(`),您可以使用UI来更改列名。右键单击表&gt;改变表&gt;编辑包含sql关键字&gt;的列名称承诺。

select [from] from <table>

注意,上述内容在MySQL中不起作用

答案 13 :(得分:0)

从这里的答案和我自己的经验来看。唯一可接受的答案是,如果您计划可移植,则不要将SQL关键字用于表格,列或其他名称。

所有这些答案都适用于各种数据库,但显然很多人都不支持ANSI解决方案。