尝试将 CTE 用于 IF

Trying to utilise CTE for an 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

您可以直接return结果:

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))

AS IIF 可从 SQL Server 2012 获得,您需要对以前的版本使用 CASE WHEN