在MS SQL Server中创build保留字/关键字的表名
命名我的数据库表已经是关键字可以吗? 对于我的情况,我试图命名将容纳我的用户的表。 我把它命名为User,但在SQL Server Management Studio中显示为粉红色,所以我假设它是一个现有的系统表或关键字。 谢谢你的build议。
保留关键字的官方列表: 保留关键字(Transact-SQL)
重复这三次:
不要这样做,我不会使用保留的话!
你会感谢我的!
您可以创build与关键字名称相同的表格。 如果您“引用”表名称,它应该工作。 SQL服务器中的默认引号是方括号:[]
CREATE TABLE [dbo].[user]( [id] [bigint] NOT NULL, [name] [varchar](20) NOT NULL ) ON [PRIMARY]
是的,没关系。 在你的查询中,你可以放置[和]你的表名,以便SQL Server知道你指的是一个表 – 即
CREATE TABLE [User] ... SELECT * FROM [User]
您可以使用[用户]执行此操作。 如果可能的话,使用与关键字不冲突的表名,以避免混淆和错误。
对string使用“单引号” ,对列名使用“双引号” 。
例:
INSERT INTO AccountMovement ("Date", Info) VALUES ('2012/03/17', 'aa'), ('2012/03/17', 'bb'), ('2012/03/17', 'cc'), ('2012/03/17', 'dd')
我坐在营地说,表名应该是复数,所以在你的情况下,将是用户。
我喜欢这个惯例,因为这对我来说很有意义。 你有一个用户集合,所以打电话给你的表。 进一步下游,如果你拉出一个单独的行,然后可以填充名为用户的对象。
如果你的约定规定使用单数的表名使用不同的东西,如:会员,客户等
另请参阅RacerX的答案!
如前所述,如果您[Braket]这个名字,那么通常是可以的。
对于MS Query,我发现双引号在查询中完美工作。
select T1."Reference" from MyTable T1
如前所述,您可以通过引用名称来完成。 当然,你也可以随时引用这个名字 – 相信我,它真的很快变老了。
顺便说一下,只是因为SSMS语法颜色这个词并不一定意味着它是一个保留字 。 Sql可以像这样烦人。 ;)
表和列名称的基本规则(或更好的对象名称):
请勿使用与保留字相同或甚至相似的任何内容。 只能使用A-Za-z0-9和下划线。 特别是不要使用空格。 只使用不需要转义的名称,然后不要使用转义作为永久testing。
你和每一个和你一起工作,或者将来都不需要使用代码的人,都不需要这样的烦恼。
正如其他人所说,不要这样做; 然而,我是在同一条船上。 我有一个规则,说我的所有表格都以单数forms存储。 组织不是组织,资产不是资产PartsCatalog有许多部分等
那么我有一个用户表,那么我该怎么称呼它呢? 我结束了逃避它[用户]。 现在我后悔这个决定,因为我总是忘记摆脱桌面; 然而,我还没有提出一个更好的名字:会员是主要的候选人。
不是一个好主意 – 由于种种原因
更多的原因为什么不1)与保留名称的明显可能的冲突2)如果在两年内,你想做一个全球replace你的代码说“用户”在表单字段或任何地方你拧的时候使用通用名称3)如果你需要search在你的代码中使用“用户”的场合 – 你知道那里(我们有超过一百万行的代码,它会杀了我们)。
我们做了什么1)每个表名都有一个独特的开始,如O_nnn,用于财务数据的对象F_nnn …我们将相同的应用于像opp_created的机会在date创build,SUSR_RID用于引用销售function内的用户ID与OPUSR_RID对用户的操作引用… 2)除了我们使用的前缀尽可能明显的名称,如O_FlightArrivalTime而不是O_FltAT。 今天的数据库显示,长名称没有性能下降。 3)现在,当使用OF_FlightArrivalTime作为Formfield名称时,您可以轻松find关联关系,但全局searchO_F …只能findDB字段,searchOF_F …表单字段和_F …. 。
我肯定会build议不要像使用保留的关键字。 我们的数据库devise的方式是通过在数据库对象名称前加上字来防止发生这样的事情。 例如,以下是我如何创build“用户”表的快速定义:
CREATE TABLE tblUser ( intUserId INT ,vchUsername VARCHAR(255) ,vchEmailAddress VARCHAR(255) ,bitIsAccountEnabled BIT ,dteUpdated DATETIME ,dteCreated DATETIME ,intUpdateUserId INT )
这样当我写查询。 我没有理解我正在处理的数据types。 我也不必担心表名中的保留关键字。