Неверный синтаксис рядом с «INSERT» и «WHERE» - PullRequest
0 голосов
/ 30 января 2019

Я не могу понять, что не так с моей хранимой процедурой.

CREATE PROCEDURE duplicatecheck2
    @QmemberID INT,
    @InputDate DATE
AS
    INSERT INTO tbl_availableMembers 
        SELECT memberId 
        FROM tbl_attendancesheet
        WHERE MemberId = @QmemberId
          AND [date] = @InputDate
          AND [clockin] IS NOT NULL
          AND [clockout] IS NULL

   UNION

   INSERT INTO tbl_availableMembers 
       SELECT memberId 
       FROM tbl_attendancemembers
       WHERE memberId NOT IN (SELECT memberId 
                              FROM tbl_attendanceSheet)
       WHERE date = @InputDate)

Я получаю следующие ошибки:

Сообщение 156, Уровень 15, Состояние 1, Процедура duplicatecheck2, Строка 14
Неверный синтаксис рядом с ключевым словом «Вставить».

Сообщение 156, Уровень 15, Состояние 1, Процедура duplicatecheck2, Строка 18
Неверный синтаксис рядом с ключевым словом «ГДЕ».

Моя другая хранимая процедура, в которой сработало объединение:

CREATE PROCEDURE duplicateCheck
    @inputdate DATE
AS
BEGIN
    DELETE FROM tbl_availableMembers

    INSERT INTO tbl_availableMembers 
        SELECT memberId
        FROM tbl_attendancemembers
        WHERE memberId NOT IN (SELECT memberId FROM tbl_attendanceSheet)
        UNION
        SELECT memberId
        FROM tbl_attendancemembers
        WHERE memberId IN (SELECT memberId 
                           FROM tbl_attendanceSheet
                           GROUP BY memberId, date
                           HAVING COUNT(*) <= 1 AND date = @inputdate)
END

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы не можете применить UNION к двум операторам INSERT (как в вашем первом фрагменте кода) - но вы можете применить его к двум операторам SELECT (как в вашем втором примере кода) By @ marc_s

0 голосов
/ 30 января 2019

Избавьтесь от "СОЮЗА".Хранимая процедура может просто запустить два оператора вставки.

Noel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...