是否可以命名已经是关键字的数据库表?对于我的情况,我试图命名将保留我的用户的表。我将它命名为用户,但它在SQL Server Management Studio中显示为粉红色,因此我假设它是现有的系统表或关键字。谢谢你的建议。
保留关键字的正式列表:Reserved Keywords (Transact-SQL)
答案 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
)
当我编写查询时这样。我无法理解我正在处理的数据类型。我也不必担心表名中的保留关键字。