MS-SQL表设计器中方括号[]的含义?

时间:2012-03-28 23:38:09

标签: sql sql-server

我有一份包含现有记录的现有数据库的副本。当我和桌上设计师一起玩时,注意到一些列名称周围有[]。它们似乎都是任意类型(float,datetime,netext,nvarchar等),并且列属性中没有任何东西可以摆脱[]。我试图重命名删除[]但是一旦我退出编辑就重新开始。

根据this帖子,它是xml列的关键字列?但这些列都不是xml列。有人会向ms-sql新手解释这个目的吗?感谢

3 个答案:

答案 0 :(得分:50)

方括号[]用于分隔标识符。如果列名是保留关键字或包含特殊字符(如空格或连字符),则必须执行此操作。

有些用户也喜欢使用方括号,即使它们不是必需的。

来自MSDN

  

分隔标识符

     

用双引号(“)或括号([])括起来。符合标识符格式规则的标识符可能会也可能不会被分隔。

SELECT *
FROM [TableX]         --Delimiter is optional.
WHERE [KeyCol] = 124  --Delimiter is optional.
     

不符合所有标识符规则的标识符必须在Transact-SQL语句中分隔。

SELECT *
FROM [My Table]      --Identifier contains a space and uses a reserved keyword.
WHERE [order] = 10   --Identifier is a reserved keyword.

答案 1 :(得分:5)

可以在对象周围放置方括号(例如视图,数据库,列等)

正如Mark所提到的,它们的主要目的是封装对象,以便特殊字符(如空格或句点)不会干扰您的语法。

默认情况下,许多应用程序使用括号中的表示法,以进一步降低语法错误或类似内容的风险。

通常不包括任何空格

Database_Name < GOOD PRACTICE

Database Name < GENERALLY TRY TO AVOID

在任何情况下,如果使用后者,您可以使用方括号,即

select * from [Database Name]

答案 2 :(得分:1)

括号是sql server中用于明确分隔信息的特殊字符。

根据文章,它们可以在xml中使用,它们也可以用于指定具有空格或其他关键词的元名称(列,表等)。

declare my column nvarchar(50)

语法无效,但您可以

declare [my column] nvarchar(50)

将它们视为明确的分隔符。