本文共 1371 字,大约阅读时间需要 4 分钟。
一般来讲,sqlserver中,字段名的命名是没有限制的,但在调用的时候,为了能够筛选字段,则有时候我们需要加上中括号或者引号
例如
declare @t table(id int,[select] bit,[1] int,date date,[税率%] money)
类似 select、delete等sqlserver关键字是不能直接定义的,如果非要用这些关键字,那么就需要使用中括号来定义了
数字开头,不符合命名规范,也是不能直接定义的,但是通过中括号,还是可以这么用
然后就是特殊符号啦,空格啦,也可以使用中括号来定义为字段名
除了定义时需要用到中括号来定义特殊字段名,筛选时也一样
select [税率%] from @t where [select]=0
除了这些固定定义外,其实更常见的地方在于行列转换中,pivot和unpivot中
DECLARE @T1 TABLE (PersonName VARCHAR(100),YearMonth int,Amount decimal(19,9))INSERT INTO @T1SELECT '张三','201901','6000' UNION ALLSELECT '李四','201901','5000' UNION ALL SELECT '张三','201902','6000' UNION ALLSELECT '李四','201902','5000' UNION ALLSELECT '王五','201902','7000' UNION ALL SELECT '张三','201903','8000' UNION ALLSELECT '李四','201903','5000' UNION ALLSELECT '王五','201903','7500' UNION ALL SELECT '张三','201904','8500' UNION ALLSELECT '李四','201904','5000' UNION ALLSELECT '王五','201904','7500' UNION ALL SELECT '张三','201906','9500' UNION ALLSELECT '李四','201906','5000' UNION ALLSELECT '王五','201906','7500' select * from @t1pivot(max(amount) for yearmonth in ([201901],[201902],[201903],[201904],[201905],[201906])) p
在YearMonth列中,值可以是任意类型,但在行转列时,如果要以YearMonth的值作为字段名,那么就需要加上中括号来定义了,因为命名规则规定,变量名不能以数字开头
当然,如果值中间出现了中括号,或者字段名中间出现了中括号,我们还是有办法补救的,用双引号来代替
declare @t table(id int,[select] bit,[1] int,date date,[税率%] money,"字段名里出现了中括号 [我就随便看看]" money)
但如果。。。。你非要在字段名里同时出现双引号和中括号。。。。那我只能说,你的命名实在太另类了。。。。
转载地址:http://zavxi.baihongyu.com/