Where子句中的保留关键字

Pரத*_*ீப் 2 sql t-sql sql-server sql-server-2008

请考虑以下设置

create table #test([user] varchar(10))
insert into #test([user]) values ('test')
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT *
FROM   #test WHERE user = 'test' --did not return record
Run Code Online (Sandbox Code Playgroud)

这引出了以下两个问题

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

Hon*_*ger 7

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

SELECT User;
Run Code Online (Sandbox Code Playgroud)

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

所以没有转义的查询user是完全有效的,它只是不适合你比较它的值.


Gan*_*kar 5

根据 MS Docs

user 没有括号将作为返回数据库用户名的函数

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

SELECT *
FROM   #test WHERE user = 'dbo'
Run Code Online (Sandbox Code Playgroud)

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