使用连词执行查询时的 SQL 行为

标签 sql sql-server

如果我有一个 SQL 查询正在对三个表执行存在性检查:

IF EXISTS(SELECT [KEY] FROM [Table1] WHERE [KEY]='Key1')
    AND EXISTS(SELECT [KEY] FROM [Table2] WHERE [KEY]='Key2')
    AND EXISTS(SELECT [KEY] FROM [Table3] WHERE [KEY]='Key3')
  1. SQL Server 是否支持条件语句的“提前退出”,以便如果针对 [Table1] 的初始存在检查返回 false,则不会执行其余两个存在检查?
  2. 假设 Microsoft SQL Server 作为后端,我希望在三个引用的表上看到什么锁定行为,同样假设针对 Table1 的初始存在检查将返回 false?

使用函数而不是实际查询进行的一些基本测试表明支持“提前退出”,但查询执行期间的锁分析还表明在所有三个表上都获取了锁,这与“提前退出”的结果相矛盾。

SQL Server 是否会获取查询中所有表的锁,以防以后需要它们?

最佳答案

SQL Server确实执行短路计算,但您无法控制它选择计算子句的顺序,除非您通过 CASE 语句执行此操作。

关于使用连词执行查询时的 SQL 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022078/

相关文章:

php - 有没有比附加 sql 字符串更好的方法来生成条件 sql?

mysql - 从hive表中的2.3亿条记录中获取更多时间过滤器与mysql比较

android - Android 设备上的 SQLite 数据库与 SQL Server 数据库之间的同步

mysql - 如何使用包含静态值的 SELECT INTO?

javascript - 如何从使用 node-oracledb 进行的查询返回回调?

java - 通过 JPQL/Hibernate 中的不同列进行排序

sql-server - SSIS变量评估表达式在脚本任务中花费的时间

java - 如何从 catch 语句中的 Java 异常对象中检索多个 SSMS 查询错误消息?

sql - 想要从显示内容中排除数字

sql - SQL 中的 LIKE 与整数