SQL创建表时为何变量与数据类型需用[]包裹?附示例
Hey, great question! 在SQL Server里用方括号[]包裹标识符(表名、字段名、架构名这类对象名称),主要是为了处理以下几种场景:
避开SQL保留关键字:SQL有一堆预定义的关键字(比如
SELECT、FROM、INT),如果你的字段/表名刚好和这些重名,直接写会触发语法错误。用[]把它包起来,SQL Server就会把它当成普通的对象名,而非关键字。比如:-- 报错:SELECT是关键字 CREATE TABLE test(SELECT int); -- 正常执行:明确这是字段名 CREATE TABLE test([SELECT] int);你例子里的
[int]其实没必要——int是数据类型,本来就不需要包裹,大概率是生成SQL的工具为了统一格式顺手加上的,核心还是针对对象标识符的处理。支持特殊命名需求:默认情况下,SQL Server不允许标识符里有空格、特殊符号(比如
-、#)或者以数字开头。但如果业务需要用这类名字(比如User Email Address),[]就能搞定:CREATE TABLE users([User Email Address] varchar(100) NOT NULL);精准控制大小写敏感:如果你的数据库用了大小写敏感的排序规则(比如
SQL_Latin1_General_CP1_CS_AS),对象名的大小写会被严格区分。用[]包裹后,你可以明确指定名字的大小写,避免因大小写差异找不到对象:-- 在大小写敏感库中,这是两个完全不同的字段 CREATE TABLE test([UserName] varchar(50), [username] varchar(50));统一编码风格与自动化便利:很多团队不管是不是关键字,都统一用
[]包裹标识符。这样做一是让代码风格更一致,读起来更顺;二是在自动生成SQL(比如ORM、代码生成器)的时候,不用额外判断名字是不是关键字,直接包起来就行,省了不少逻辑。
内容的提问来源于stack exchange,提问作者lipi Passi
相关产品推荐
相关产品推荐

