Sql 我的右括号是抛出错误
我正在尝试执行此查询,但一直收到错误消息Sql 我的右括号是抛出错误,sql,sql-server,Sql,Sql Server,我正在尝试执行此查询,但一直收到错误消息 Msg 102, Level 15, State1 Incorrect syntax near ')'. 请你看一下我的问题好吗?我相信对于每个SQL关键字,我都添加了相应的括号 USE [db] GO SET NOCOUNT ON DECLARE @AlertDateTime date , @HostName varchar(50) , @Program varchar(100) , @Event varc
Msg 102, Level 15, State1
Incorrect syntax near ')'.
请你看一下我的问题好吗?我相信对于每个SQL关键字,我都添加了相应的括号
USE [db]
GO
SET NOCOUNT ON
DECLARE @AlertDateTime date
, @HostName varchar(50)
, @Program varchar(100)
, @Event varchar(100)
, @Entity varchar(50)
, @Class tinyint
, @Severity tinyint
, @AlertMessage varchar(1024)
, @SkipFlag char(1)
select cast(getdate() as date)
IF EXISTS
(SELECT * FROM SendAlertLog
WHERE EXISTS
(
SELECT SendAlertLog.Event
FROM SendAlertLog
GROUP BY SendAlertLog.Event
HAVING COUNT (1) >= 2
)
AND SendAlertLog.SkipFlag != 'Y'
AND AlertDateTime <= DATEADD (mi,-30,@AlertDateTime)
)
我不知道我包括或排除了什么错误。请帮助看起来您有一个if,但如果表达式为true,则没有要执行的语句。你有
IF EXISTS(...)
但是你需要
IF EXISTS(...)
DO_SOMETHING
请在不重复使用SendAlertLog的情况下尝试此选项-
DECLARE @AlertDateTime DATE
IF EXISTS (
SELECT 1
FROM (
SELECT
cnt = COUNT(1)
, SkipFlag = MAX(l.SkipFlag)
, AlertDateTime = MAX(l.AlertDateTime)
FROM dbo.SendAlertLog l
GROUP BY l.[Event]
) l
WHERE cnt >= 2
AND l.SkipFlag != 'Y'
AND l.AlertDateTime <= DATEADD(mi, -30, @AlertDateTime)
) BEGIN
PRINT 'Do something'
END
你错过开始了吗。。。谢谢Satya,使用开始结束工作!非常感谢。mhasan和user12861。我删除了IF EXISTS并替换为BEGIN END。谢谢,但聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或select列表中包含的子查询中,正在聚合的列是一个外部引用:我对数据库领域非常陌生。这是消除查询编写中的冗余并用IF语句控制输出视图的一个好方法。