Where子句中的保留关键字

时间:2017-11-17 14:03:03

标签: sql sql-server sql-server-2008 tsql

考虑以下设置

create table #test([user] varchar(10))
insert into #test([user]) values ('test')

user列用方括号括起来时,查询返回结果,否则即使有匹配的记录也不会返回结果

SELECT *
FROM   #test WHERE [user] = 'test' -- returns record

SELECT *
FROM   #test WHERE user = 'test' --did not return record

这引出了以下两个问题

  1. 为什么第一个查询有效,第二个查询没有?
  2. 为什么保留关键字允许在where子句中使用而不转义它?

2 个答案:

答案 0 :(得分:7)

用户是保留关键字的原因。试试这个:

SELECT User;

对我来说,它返回一行值dbo

因此,没有转义user的查询完全有效,它只是不符合您要比较的值。

答案 1 :(得分:5)

根据MS Docs

不带括号的

user将作为返回数据库用户名的函数

如果您检查以下查询,它将返回记录

SELECT *
FROM   #test WHERE user = 'dbo'

当我们使用[]方括号时,sql server将视为非保留关键字,如用户定义的列名,表名,函数名.etc