如何将SQL短路的短路
发布时间:2021-01-17 17:36:56 所属栏目:MsSql教程 来源:网络整理
导读:我试图在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.虽然,我期待一种
|
我试图在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中依赖条件的评估顺序. (编辑:天瑞地安资讯网_黄海网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql server 2012 FileTable有什么功能?
- sql-server – 每次执行触发器编译吗?
- sql – 从to_char()输出中删除空白填充
- sql-server – 使用GUI恢复数据库 – 要恢复的文件错误
- sql-server – 如何在一个查询中连接一列内连接中多行的字符
- sql-server – 从DMV中,你能判断一个连接是否使用了Applica
- sql-server – 管道/ veritcal bar字符在TSQL中意味着什么?
- sql-server – 为什么DELETE会对性能产生影响?
- .net – 为什么这个DataAdapter不会将行插入数据库?
- sql-server – 可以在一台SQL服务器上放置的数据库数量有限
站长推荐
热点阅读


