sql - 为什么这个看起来缺少空格的 SQL 查询可以工作?

标签 sql sql-server

我的一个 friend 发现了这一点,我在 SQL Server Management Studio 中测试并确认了这一点。如果发现某个列是INT,则可以查询:

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

请注意,1 和 AND 之间没有空格。我们想知道为什么这对于 SQL 来说不是问题。这是已知的 SQL 行为吗?

最佳答案

Transact-SQL Reference: Data Types: Constants页列出了常量的有效语法。 1 是一个有效的常量。 1A 不是任何可能的有效常量的开始,因此解析器停止读取此处。

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

关于sql - 为什么这个看起来缺少空格的 SQL 查询可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31795233/

相关文章:

MySQL 按 SUM 分组

php - MySQL 到 SQL Server : The conversion of a nvarchar data type to a datetime

php - SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中

sql - xlock、rowlock、holdlock 是否正确?

SQL 查询、计数和分组依据

php - Symfony2/Doctrine2 : Don't drop fulltext index on schema:update

sql - 备份数据库并删除敏感数据

php - 根据另一个表中的列表过滤 MySQL 表结果

SQL 选择或插入返回 ID

c# - 使用 Entity Framework 将 SQL Server 数据库中的表拉入 C# 中的 List<>