我的一个专栏叫。我不能改名字,因为不是我做的。 我是否允许做一些像SELECT from TableName或有一个特殊的语法,以避免SQL Server混淆?


当前回答

你可以像这样把你的列名放在括号里:

Select  [from] from < ur_tablename>

Or

放入一个临时表,然后随意使用。 例子:

Declare @temp_table table(temp_from varchar(max))

Insert into @temp_table
Select * from your_tablename

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

其他回答

简单的解决方案

假设列名是from;因此,查询中的列名可以通过表别名引用

Select * from user u where u.from="US"

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

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

一些可靠的答案——但投票最多的答案是狭隘的,只涉及SQL Server。总而言之:

If you have source control, the best solution is to stick to the rules, and avoid using reserved words. This list has been around for ages, and covers most of the peculiarities. One tip is that reserved words are rarely plural—so you're usually safe using plural names. Exceptions are DIAGNOSTICS, SCHEMAS, OCTETS, OFFSETS, OPTIONS, VALUES, PARAMETERS, PRIVILEGES and also verb-like words that also appear plural: OVERLAPS, READS, RETURNS, TRANSFORMS. Many of us don't have the luxury of changing the field names. There, you'll need to know the details of the RDBM you're accessing: For SQL Server use [square_braces] around the name. This works in an ODBC connection too. For MySQL use `back_ticks`. Postgres, Oracle and several other RDBMs will apparently allow "double_quotes" to be used.

在表名上加上冒犯性的单词也可以。

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

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

你的问题似乎已经回答得很好了,但我想再补充一点。

那些设计数据库的人应该很清楚保留的关键字,并避免使用它们。如果你发现有人在使用它,告诉他们(以礼貌的方式)。这里的关键字是保留字。

更多信息:

不应使用保留关键字 作为对象名。数据库升级 从早期版本的SQL Server 可能包含标识符,包括 话不保留在前面 版本,但那是保留的话 SQL Server的当前版本。 可以使用引用对象 分隔标识符直到名称 是可以改变的。” http://msdn.microsoft.com/en-us/library/ms176027.aspx

and

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