3

我正在尝试使用查询创建以下 SQL 表:

 create table Return_indiv (Date datetime, issueid varchar(255), Return varchar(255))

如您所见,其中一列名称是“Return”。但是,SQL 认为它是 function return,并给出以下错误:

 Msg 156, Level 15, State 1, Line 1
 Incorrect syntax near the keyword 'Return'.
 Msg 195, Level 15, State 10, Line 1
 'varchar' is not a recognized built-in function name.

有什么办法可以克服这个错误?谢谢!

4

5 回答 5

6

您需要在列名周围添加括号,因为它是关键字:

create table Return_indiv 
(
    Date datetime, 
    issueid varchar(255), 
    [Return] varchar(255)
)

请注意,每次查询表中的该列(或更新等)时,您还必须使用方括号。考虑到这一点,您需要确定是否值得拥有与保留字同名的列.

另请注意,这Date是 SQL 2008 及更高版本中的关键字 - 因此,如果您计划升级,则还需要转义该列名。

于 2013-09-27T15:22:57.653 回答
5

只是为了澄清一点,Return 是数据库中的保留字(可能是函数或其他东西)。所以你不能只把它用作表名、列名等。你可以用[]包围它来解决这个问题。但更好的主意是不要在任何对象名称中使用保留字。我无法确定该列中的内容,但也许您可以将其命名为 RETURN_VALUE、RETURN_ITEM 等等。只是避免保留字,它使几乎每个人的生活更轻松。

于 2013-09-27T15:26:57.173 回答
4

将 [] 放在 return 关键字周围

create table Return_indiv (Date datetime, issueid varchar(255), [Return] varchar(255))
于 2013-09-27T15:22:34.333 回答
3

放入括号中:

create table #temp ([return] varchar(100))
于 2013-09-27T15:23:06.577 回答
1

Yo 应该使用方括号[]来避免解析器将您的列名理解为关键字。

不过,我建议不要使用关键字来命名列或表。在您太了解代码后,其他人会感到困难。如果其他开发人员不知道 ot 是关键字,则可能很难理解查询失败的原因,以防出现错误。

试试这个

USE tempdb
GO

CREATE TABLE Return_indiv
(
    [Date]   DATETIME,
    issueid  VARCHAR(255),
    [RETURN] VARCHAR(255)
)
于 2013-09-27T15:23:33.423 回答