在MS SQL Server中创建保留字/关键字的表名

时间:2009-03-29 23:06:59

标签: sql sql-server

是否可以命名已经是关键字的数据库表?对于我的情况,我试图命名将保留我的用户的表。我将它命名为用户,但它在SQL Server Management Studio中显示为粉红色,因此我假设它是现有的系统表或关键字。谢谢你的建议。

保留关键字的正式列表:Reserved Keywords (Transact-SQL)

12 个答案:

答案 0 :(得分:98)

重复这三次:

不要这样做,我不会使用保留的字!

你会感谢我的!

答案 1 :(得分:65)

您可以创建与关键字同名的表格。如果您“引用”表名,它应该起作用。 SQL Server中的默认引号是方括号:[]

CREATE TABLE [dbo].[user](
    [id] [bigint] NOT NULL,
    [name] [varchar](20) NOT NULL
) ON [PRIMARY]

答案 2 :(得分:9)

是的,没关系。在您的查询中,您可以将[和]放在表名周围,以便SQL Server知道您指的是表 - 即

CREATE TABLE [User] ...
SELECT * FROM [User]

答案 3 :(得分:7)

您可以使用[用户]执行此操作。如果可能的话,使用与关键字不冲突的表名,以避免混淆和错误。

答案 4 :(得分:6)

字符串使用'单引号',为列名称使用“双引号”

示例:

INSERT INTO AccountMovement
("Date", Info)
VALUES
('2012/03/17', 'aa'),
('2012/03/17', 'bb'),
('2012/03/17', 'cc'),
('2012/03/17', 'dd')

答案 5 :(得分:5)

我坐在营地里说表名应该是复数,所以在你的情况下就是用户。

我喜欢这个惯例,因为它对我有意义。你有一个用户集合,所以打电话给你的表。如果您拉出一个可以填充名为User的对象的单行,则进一步向下游。

如果您的约定规定对表名使用单数,请使用不同的内容,例如:会员,客户等。

另见RacerX的答案!

如前所述,如果你[Braket]这个名字,那就好了。

答案 6 :(得分:5)

对于MS Query,我发现双引号在查询中完美运行。

select T1."Reference"
from MyTable T1

答案 7 :(得分:2)

如上所述,您可以通过引用名称来实现。当然,你也必须在你引用它时引用这个名字 - 相信我,它会很快变老。

顺便说一句,仅仅因为SSMS语法为单词着色并不一定意味着它是reserved word。 Sql可能会像那样烦人。 ;)

答案 8 :(得分:2)

表名和列名的基本规则(或更一般的更好的对象名):

不要使用与保留字相同或甚至类似的任何内容。仅使用A-Za-z0-9和下划线。特别是不要使用空格。只使用不需要转义的名称,然后不要使用转义作为永久测试。

您和所有与您合作的人,或者将会使用您的代码,都不需要加重。

答案 9 :(得分:0)

正如其他人所说,不要这样做;但是,我在同一条船上。我有一条规则说我的所有表都以单数形式存储。组织不是组织,资产不是资产零件目录有许多零件等。

我有一个User表,所以我该怎么称呼它?我最终逃脱了它[用户]。现在我对这个决定感到遗憾,因为我总是忘记逃避这个决定;但是,我还没有提出更好的名字:会员是主要候选人。

答案 10 :(得分:0)

不是一个好主意 - 出于各种原因

更多原因为什么不 1)与保留名称明显可能发生冲突 2)如果在两年内你想在你的代码"用户"中做全局替换。在表单字段中或在使用通用名称时被搞砸的任何地方 3)如果您需要搜索使用" user"在你的代码中 - 你知道它在哪里(我们有超过一百万行代码,它会杀死我们)。

我们做了什么 1)每个表名对于财务数据的对象F_nnn具有唯一的开始,如O_nnn ...我们将相同的应用于诸如opp_created之类的字段,用于在日期创建商机,SUSR_RID用于引用销售功能中的用户ID,而OPUSR_RID是可操作的引用用户...... 2)除了前缀之外,我们使用尽可能明显的名称,例如O_FlightArrivalTime而不是O_FltAT。今天的数据库显示较长的名称没有性能下降。 3)现在,当使用OF_FlightArrivalTime作为表单字段名称时,您可以轻松找到关联,但全局搜索O_F ...只能找到DB字段,搜索OF_F ...表单字段和_F .... 。

答案 11 :(得分:0)

我肯定会建议不要像你一样使用保留的关键字。设计数据库的方法是在数据库对象名前加上前缀,以防止发生类似这样的事情。例如,这里有一个关于我如何创建“用户”的快速定义。表:

CREATE TABLE tblUser
(
   intUserId INT
  ,vchUsername VARCHAR(255)
  ,vchEmailAddress VARCHAR(255)
  ,bitIsAccountEnabled BIT
  ,dteUpdated DATETIME
  ,dteCreated DATETIME
  ,intUpdateUserId INT
)

当我编写查询时这样。我无法理解我正在处理的数据类型。我也不必担心表名中的保留关键字。