Mot key réservé dans la clause Where

Considérez la configuration suivante

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

lorsque user colonne user est entourée de crochets, la requête renvoie le résultat sinon elle ne renvoie pas le résultat même s'il existe un logging correspondant

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

Cela soulève les deux questions suivantes

  1. Pourquoi la première requête fonctionne-t-elle et la deuxième requête non?
  2. Pourquoi le mot key reserved est autorisé à utiliser la clause where sans l'échapper?

L'user est un mot-key réservé pour une raison. Essaye ça:

 SELECT User; 

Pour moi, il renvoie une seule ligne avec la valeur dbo .

Ainsi, la requête sans échappement d' user est parfaitement valide, elle ne correspond tout simplement pas à la valeur que vous la comparez.

Selon MS Docs

user sans parenthèses fonctionnera comme une fonction qui renvoie le nom d'user de la database

si vous vérifiez avec la requête suivante, il returnnera les loggings

 SELECT * FROM #test WHERE user = 'dbo' 

Lorsque nous utilisons [] Crochets carrés, le server SQL traitera comme un mot key non réservé comme le nom de colonne défini par l'user, le nom de la table, la fonction name.etc