尝试将 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
。
我正在使用 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
。