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

问题描述 投票:1回答:2

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

更新1:

当然,除了创建关键字列表,然后进行手拉手比较。

sql-server ado
2个回答
4
投票

既然你在询问命名,那么让我给你一些建议,这些建议将为你的问题提供一个可能的答案:

如果你不确定,只要养成在[SquareBraces]中总是围绕对象名称的习惯,那么你称之为对象并不重要。

但话说回来,最好遵循一个好的惯例,无论是你工作场所常见的惯例,还是find another sensible惯例(有时似乎有更多关于命名约定的意见,而不是人们编码它们!)。

我的偏好(FWIW)简单地说是:

  • 反映单行包含的实体的表名,例如[Order][OrderLine][Customer]等。要回答你的原始问题,你会发现ORDER是一个关键字,但是只要你把方括号放在它周围,解析器知道它是一个对象。每次都可以工作,并且您不必为包含订单记录的表格制作人为或冗余的名称,例如CustomerOrder
  • 许多链接表的复合表名称反映了在有意义的情况下链接的表,例如[Customer_Contact][Product_ProductCategory]等。
  • 主键总是简单地称为[Id],无论哪个实体都是主键,除非有非常好的技术理由不这样做,这很少见。
  • 外键以它们引用的PK的表和列命名,例如。 [CustomerId]

至于为什么我以单数形式命名表,而不是将表视为“客户”的集合,我将其视为存储“客户”类型的对象的存储库。当使用一些ORMs时我的效果特别好(我喜欢C#中的Dapper,但是对于其他一些几乎被迫多元化的人来说它不能很好地工作),所以你必须找出最适合你的方法和你的方法。最舒服的。

祝好运!


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

© www.soinside.com 2019 - 2024. All rights reserved.