Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个似乎缺少空格的SQL查询会起作用?_Sql_Sql Server - Fatal编程技术网

为什么这个似乎缺少空格的SQL查询会起作用?

为什么这个似乎缺少空格的SQL查询会起作用?,sql,sql-server,Sql,Sql Server,我的一位朋友发现了这一点,我在SQLServerManagementStudio中测试并确认了这一点。如果找到的列是INT,则可以查询: select * from table where foo = 1AND 1=1; /* works no problem */ 请注意,1与和之间没有空格。我们想知道为什么这不是SQL的问题。这是一种已知的SQL行为吗?与1=1或1+1没有区别。见此: 顺便说一句,MySQL中的结果相同。该页面列出了常量的有效语法1是一个有效常数1A不是任何可能的有效

我的一位朋友发现了这一点,我在SQLServerManagementStudio中测试并确认了这一点。如果找到的列是
INT
,则可以查询:

select * 
from table 
where foo = 1AND 1=1; /* works no problem */

请注意,1与
之间没有空格。我们想知道为什么这不是SQL的问题。这是一种已知的SQL行为吗?

1=1
1+1
没有区别。见此:

顺便说一句,MySQL中的结果相同。

该页面列出了常量的有效语法<代码>1
是一个有效常数
1A
不是任何可能的有效常量的开始,因此解析器停止读取该常量


请注意,并非所有字母都是这样:
E
可以出现在数字中。因此,
select 1except select 1
仍然有效,但不是您所期望的。这被解析为
select 1e as except
,其中省略了可选关键字
as
,后面是一条附加语句
select 1
。它与选择1完全不同,只是选择1

标识符不能以数字开头。数字不能包含“A”。因此,词法分析器能够区分这两个标记,解析器能够区分数字何时结束,关键字何时开始。实际上,我只是想让它抱怨语法错误,当我得到结果时,一开始我很困惑基于我在编写SQL时遇到错误的频率,我很惊讶它能正常工作。你的例子让我更难过,我认为当你做这两件事的时候,他们应该对你大喊大叫。
select case when 'a'in('a','b')then'a'else'b'end;