考虑以下设置
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
这引出了以下两个问题
where
子句中使用而不转义它?答案 0 :(得分:7)
用户是保留关键字的原因。试试这个:
SELECT User;
对我来说,它返回一行值dbo
。
因此,没有转义user
的查询完全有效,它只是不符合您要比较的值。
答案 1 :(得分:5)
根据MS Docs
不带括号的 user
将作为返回数据库用户名的函数
如果您检查以下查询,它将返回记录
SELECT *
FROM #test WHERE user = 'dbo'
当我们使用[]
方括号时,sql server将视为非保留关键字,如用户定义的列名,表名,函数名.etc