我记得几年前我在和PHP一起工作时,我可以通过命名MySQL列'desc'或任何其他用作操作符的术语来炸毁我的应用程序。当命名SQL Server表中的列时,是否有任何名称我应该避免使用?
那么,总的来说,我应该避免给我的表列?
我记得几年前我在和PHP一起工作时,我可以通过命名MySQL列'desc'或任何其他用作操作符的术语来炸毁我的应用程序。当命名SQL Server表中的列时,是否有任何名称我应该避免使用?
那么,总的来说,我应该避免给我的表列?
只要你用'['和']'来包围每一列名称,那么你使用什么并不重要。即使是一个空间的作品(尝试:[])。
编辑:如果在任何情况下都不能使用'['和']',请检查文档中不允许使用的字符以及系统固有的关键字;那些会超出界限。关于我的头顶,允许用于标识符的字符(对于SqlServer)是:a-z,A-Z,0-9,_,$,#。
不以数字开头,不要使用空格,不要使用保留字和不使用非字母数字字符
但是如果你真的想你仍然可以做,但你需要用括号
包围它,这将失败
create table 1abc (id int)
这不会失败
create table [1abc] (id int)
但现在您需要始终使用[],我会避免使用上面提到的名称
您应该避免使用任何保留的SQL关键字(例如, SELECT)并从最佳实践中避免空格。
是的,没有。
使用[square brackets]
或"double quotes"
逃离多字的标识符或关键字,甚至有反斜杠或任何其他有点奇怪角色的名字,如果你必须。
严格地说,没有什么你不能命名你的列。但是,如果您避免使用您正在编程的语言中的空格,SQL保留字和保留字的名称,它会使您的生活更轻松。
只要用方括号括住它,就可以使用几乎任何东西:
SELECT [value], [select], [insert] FROM SomeTable
然而,我想避免这样做,一方面是因为无处不在键入方括号中是烦人和partyly因为我一般不找到像“值”特别描述列名称! :-)
只要远离SQL关键字和任何包含字母之外的东西,并且不应该需要使用那些讨厌的方括号。
你可以用方括号[]括住一个单词,基本上使用你想要的任何东西。
我不喜欢使用方括号,为了做到这一点,您只需避免使用保留字。
入住在其他的答案表示保留关键字的列表。
为避免在对象名称中有空格或其他特殊字符,请避免使用引号或方括号使用“引号”。原因是引用时,对象名在某些数据库引擎中变得区分大小写(虽然对MSSQL不确定)
有些团队使用数据库对象(表,视图,列)的前缀,如T_PERSON, V_PERSON, C_NAME
等。我个人不会像这个惯例,但它确实有助于避免关键字问题。
小心使用上的更新方括号的,我使用下面的查询有一个问题:
更新日志SET锁定= 1 WHERE [ID] IN(SELECT [ID] FROM IDS)
这导致所有记录将被更新,然而,这似乎很好地工作:
更新日志SET锁定= 1 WHERE ID IN(SELECT [ID] FROM IDS)
注意,这个问题似乎具体到更新,作为以下仅返回预期的行(并非全部r OWS):
SELECT * FROM日志WHERE [ID] IN(SELECT [ID] FROM IDS)
这使用MSDE 2000 SP3并连接到使用MS SQL(2000)查询分析器V 8.00数据库。 194
很奇怪,可能与此相关的知识库错误http://support.microsoft.com/kb/140215
最后我只是删除所有不必要的方括号。
是的,但我仍然建议避免'空间'作为一个名称。 :-) – 2009-07-07 15:48:51
哦,我同意。我第一次发现你可以做到这一点,我感到震惊(甚至在这里问了一个关于它的问题)。有人向我展示了一个有用的例子:当你正在测试查询时,为查询结果提供更好的空间。 – 2009-07-07 15:50:54