使用SQL关键字作为不带括号的名称

时间:2014-01-15 00:28:27

标签: sql sql-server-2008 keyword naming brackets

哪些关键字可以用作没有括号的名称,哪些不是?

为什么有些SQL关键字被允许用作其他人没有的名字? 是否有任何模式可以确定我可以使用哪些模式以及在不尝试编译和获取错误的情况下我不能使用哪种模式?

我的印象是不允许使用较旧的关键字,但允许使用较新的关键字,以便较新的SQL版本与旧版本尽可能兼容。

在以下示例中,汇总可以用作不带括号的名称,但是组不能。

if object_id('accident') is not null drop table accident
create table accident(
     state varchar(50)
    ,city varchar(50)
    ,zip varchar(50)
    ,person varchar(50)
    ,id int identity(1,1)
)

insert accident(state,city,zip,person)values
 ('NY','Manhattan',10001,'John')
,('NY','Manhattan',10001,'John')
,('NY','Manhattan',10001,'Barbara')


;with
    rollup as (
            select accident.*
                    ,lvl = grouping_id(accident.state,accident.city,accident.zip,accident.person,accident.id)
                    ,accidents=count(1)
                    ,people=0
                from accident
                group by rollup(accident.state,accident.city,accident.zip,accident.person,accident.id)
        )
        select * from rollup

;with
    [group] as (
            select accident.*
                    ,lvl = grouping_id(accident.state,accident.city,accident.zip,accident.person,accident.id)
                    ,accidents=count(1)
                    ,people=0
                from accident
                group by rollup(accident.state,accident.city,accident.zip,accident.person,accident.id)
        )
        select * from [group]

尝试将组用作无括号的名称

;with
    group as (
            select accident.*
                    ,lvl = grouping_id(accident.state,accident.city,accident.zip,accident.person,accident.id)
                    ,accidents=count(1)
                    ,people=0
                from accident
                group by rollup(accident.state,accident.city,accident.zip,accident.person,accident.id)
        )
        select * from group

给出错误:

  

Msg 156,Level 15,State 1,Line 28
  关键字“group”附近的语法不正确。
  Msg 156,Level 15,State 1,Line 36
  关键字“group”附近的语法不正确。

1 个答案:

答案 0 :(得分:2)

保留关键字的列表,您可以在here中找到它。将它粘贴到这个答案中太长了。必须转义所有保留的关键字。在您的示例中,rollup不是保留关键字,而group是。

ISO标准中有更多的关键词。 Plase在同一链接中查看以下注释:

  

此外,ISO标准定义了保留关键字的列表。避免对对象名称和标识符使用ISO保留关键字。 ODBC保留关键字列表(如下表所示)与ISO保留关键字列表相同。

     

ISO标准保留关键字列表有时可能比SQL Server更具限制性,有时限制性更小。例如,ISO保留关键字列表包含INT。 SQL Server不必将其区分为保留关键字。

     

Transact-SQL保留关键字可用作数据库或数据库对象的标识符或名称,例如表,列,视图等。使用带引号的标识符或带分隔符的标识符。使用保留关键字作为变量名称和存储过程参数不受限制。