4

このクエリを実行しようとしていますが、エラー メッセージが表示され続けます

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

何を含めて何を除外して間違っているのかわかりません。助けてください

4

2 に答える 2

3

if があるように見えますが、式が true の場合に実行するステートメントはありません。あなたが持っている

IF EXISTS(...)

しかし、あなたは必要です

IF EXISTS(...)
   DO_SOMETHING
于 2013-04-27T04:41:00.640 に答える
2

これを試してください(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
于 2013-04-27T05:50:26.183 に答える