如何确保列名与任何SQL Server保留字都不匹配

时间:2018-09-12 02:22:42

标签: sql-server ado

我正在使用查询命令来创建SQL Server表。我不希望列名与任何SQL Server关键字匹配(例如:use,create,...)。如何检查列名(在查询字符串中)与任何SQL Server关键字都不匹配?

更新1:

当然,除了创建关键字列表之外,然后进行并行比较。

2 个答案:

答案 0 :(得分:4)

既然您是在问命名问题,请允许我给您一些建议,这将为您的问题提供一个可能的答案:

如果不确定,只需养成始终将[SquareBraces]中的对象名称括起来的习惯,那么您对对象的称呼就无关紧要了。

但是,话虽如此,绝对最好遵循良好的惯例,无论是您工作场所中常见的惯例,还是遵循find another sensible惯例(有时似乎有关于命名约定的意见多于没有编码约定的人!)。

我的偏好设置(FWIW)简单来说就是:

  • 反映单个行包含的实体的表名,例如[Order][OrderLine][Customer]等。要回答您的原始问题,您会注意到{{ 1}}是此处的关键字,但是只要在其周围加上方括号,解析器就会知道它是一个对象。每次都有效,并且您不必为保存Order记录的表命名为人为或多余的名称,例如ORDER
  • 许多链接表的综合表名称反映了两个表都在合理的情况下被链接,例如CustomerOrder[Customer_Contact]等。
  • 主键总是简单地称为[Product_ProductCategory],无论它是作为哪个键的主键,除非有很好的技术理由不这样做,这都是罕见的。
  • 外键以它们所引用的PK的表和列命名。 [Id]

为什么我将表命名为单数形式,而不是将表视为“客户”的集合,而是将其视为存储“客户”类型对象的存储库。在使用某些ORMs(在C#中我喜欢Dapper)时,这种方法特别有效(但在某些几乎要采用多元性的其他方法中,效果却不佳),因此您必须弄清楚最适合您,最适合您。

祝你好运!

答案 1 :(得分:2)

在编写脚本以创建表时,与关键字匹配的列名称的颜色将变为粉红色,蓝色,灰色。只需用[]包裹相关的列即可。

示例:

CREATE TABLE MyTable([DateTime] datetime)

不确定系统数据库中是否存在系统表,您可以从中查询该表,但如果可能会使用它,请将其放到此处。

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017