首页 MsSql 如何将SQL短路的短路

如何将SQL短路的短路

我试图在SQL服务器中执行以下查询: declare @queryWord as nvarchar(20) = asdasSELECT * FROM TABLE_1 WHERE (ISDATE(@queryWord) = 1) AND TABLE_1.INIT_DATE = CONVERT(Date, @queryWord) 这显然会导致错误,因为’asdas’无法转换为Date.虽

我试图在SQL服务器中执行以下查询:

declare @queryWord as nvarchar(20) = 'asdas'

SELECT  * FROM TABLE_1 
WHERE (ISDATE(@queryWord) = 1) 
AND TABLE_1.INIT_DATE = CONVERT(Date,@queryWord)

这显然会导致错误,因为’asdas’无法转换为Date.虽然,我期待一种不同的行为.也就是说,因为ISDATE(@queryWord)= 1是假的,我期望SQL不检查第二个条件,但显然,它确实如此.

我知道还有其他一些方法可以执行此查询,但这不是我的问题.我想知道是否有某种方法不检查第二个条件是第一个不满足.我很好奇,因为我认为SQL已经做到了这一点.

解决方法

SQL Server不会短路(也不应该).

如果你需要它在某些情况下不尝试某些东西,你需要以编写查询的方式强制它.

对于此查询,最简单的修复方法是在WHERE子句中使用CASE表达式.

declare @queryWord as nvarchar(20) = 'asdas'

SELECT  * FROM TABLE_1 
WHERE TABLE_1.INIT_DATE = (CASE WHEN ISDATE(@queryWord) = 1 
                                THEN CONVERT(Date,@queryWord)
                           ELSE NULL  END)

副手,CASE和查询嵌套是我能想到的唯一两种支持的方法,用于强制SQL中依赖条件的评估顺序.

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/shujuku/mssql/20200716/6311.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部