sql-server - 尝试将 CTE 用于 IF
问题描述
如果遇到触发器,我将使用 SQL 作为自动化过程的一部分来运行重新编译。我需要为自动化软件输出数字“0”或数字“2”。我已经编写了以下查询并且它有效,但我正在努力发展我的知识,所以有几个问题......
在下文中,我使用的是 CTE 还是子查询?另外,这个简单的查询可以改进吗?
USE ErrorLog
GO
DECLARE @Rslt AS INT
SET @Rslt = (
SELECT COUNT(*)
FROM [ErrorLog].[dbo].[ErrorLog]
WHERE system = 'BEMA' AND Message LIKE 'Timeout expired%'
AND errDate > DATEADD(MINUTE, -15, CURRENT_TIMESTAMP))
IF
(@Rslt > '0')
BEGIN
SELECT 2
END
ELSE
BEGIN
SELECT 0
END
解决方案
可以直接返回结果:
SELECT IIF(COUNT(*) > 0, 2, 0)
FROM [ErrorLog].[dbo].[ErrorLog]
WHERE system = 'BEMA' AND Message LIKE 'Timeout expired%'
AND errDate > DATEADD(MINUTE, -15, CURRENT_TIMESTAMP))
或直接分配:
DECLARE @Rslt AS INT
SELECT @Rslt = IIF(COUNT(*) > 0, 2, 0)
FROM [ErrorLog].[dbo].[ErrorLog]
WHERE system = 'BEMA' AND Message LIKE 'Timeout expired%'
AND errDate > DATEADD(MINUTE, -15, CURRENT_TIMESTAMP))
ASIIF
在 SQL Server 2012 中可用,您需要在CASE WHEN
以前的版本中使用。
推荐阅读
- android - Flutter 从 firebase 填充 DropDown 中的数据
- php - PHP SoapClient 的 WSDL 文件
- python - 进程以退出代码 137 结束(被信号 9:SIGKILL 中断):检索图像数据
- php - Google Cloud Vision 在本地主机上工作,但不在 Google Cloud 托管的 WordPress 网站上
- ios - 导航视图有问题(SwiftUI、iOS)
- python - 如何在 Python 中比较两个 3D 图?
- numpy - numpy - numpy.r_['string integer', array] 的第三个字符串整数的解释
- javascript - 解构后直接赋值全局变量
- algorithm - 如何为多个文档中的字符串选择最佳匹配,其中两者的分数相等?
- javascript - Javascript - 异步加载代码时 window.onload 的替代方案