我有一份包含现有记录的现有数据库的副本。当我和桌上设计师一起玩时,注意到一些列名称周围有[]。它们似乎都是任意类型(float,datetime,netext,nvarchar等),并且列属性中没有任何东西可以摆脱[]。我试图重命名删除[]但是一旦我退出编辑就重新开始。
根据this帖子,它是xml列的关键字列?但这些列都不是xml列。有人会向ms-sql新手解释这个目的吗?感谢
答案 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)
将它们视为明确的分隔符。