与目录视图同名的 SQL 表

zer*_*oef 3 sql-server best-practices ssms naming-convention t-sql

在 SQL 中命名表时,我尽量远离 SQL 保留关键字,但今天有同事质疑Events作为表名的使用。他们说,任何在 SSMS 中变成绿色的东西都不应该用作表名。

Events在 MS SQL Server 中用作表名时,是否有任何我应该关注的冲突或问题?

Sol*_*zky 5

我通常也尽量避免为用户创建的对象使用保留字,但有时真的很难避免。一些非常常见的术语是保留字(例如UserandLogin等),因此有时被迫不惜一切代价避免使用它们意味着您需要为您的项目选择一个不太有意义、不太直观的名称,而这确实对您的项目没有好处或公司。

因此,唯一真正的“问题”是您需要做的以防止冲突:始终分隔保留字的对象名称(即始终指定由[和包围的名称])。

现在,并非所有在 SSMS 中改变颜色的单词都会出现技术冲突,但这并不意味着您不应该对它们进行分隔。这些词可能会在未来的版本中成为技术冲突,这可能会使升级复杂化(即增加时间,从而增加成本)。

一个简单的例子:

USE [tempdb];
CREATE TABLE dbo.Select ([Col1] INT); -- "Select" = blue
/*
Msg 156, Level 15, State 1, Line XXXXX
Incorrect syntax near the keyword 'Select'.
Msg 102, Level 15, State 1, Line XXXXX
Incorrect syntax near 'INT'.
*/


CREATE TABLE dbo.[Select] ([Col1] INT);
-- Success


CREATE TABLE dbo.Event ([Col1] INT); -- "Event" = blue
-- Success


CREATE TABLE dbo.Events ([Col1] INT); -- "Events" = green
-- Success
Run Code Online (Sandbox Code Playgroud)

同样,即使不需要分隔“事件” ,如果您确实使用它,我强烈建议您始终指定它[Events]以保证没有冲突。

  • 找出您可以在 SQL Server 中使用哪些愚蠢的对象名称需要花费数小时的乐趣。我的个人测试数据库目前有名为“WHERE”的表(列名为“FROM”和“ORDER BY”)、“mytable ; drop database x ;--”和“”... (2认同)