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