Синтаксис Временная таблица - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь создать временную таблицу в триггере, но я получаю синтаксическую ошибку рядом с "в, и я не понимаю, почему! Эта временная таблица должна сохранить balance, ID участника и браслет ID значения из браслета при вставке нового WRISTBAND с существующим IDPARTICIPANT. И затем обновите BALANCE вставленного WRISTBAND со значениями во временном.

КОД:

select w.IDPARTICIPANT, w.IDPWRISTBAND, w.BALANCE into #temp_s 
from WRISTBAND w, inserted i 
where w.IDPARTICIPANT = i.IDPARTICIPANT and w.ACTIVE = 1;

update WRISTBAND
set BALANCE = 
(
    select t.BALANCE 
    from #temp_s t 
)

Что я делаю не так? Вы можете мне помочь? Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Прежде всего у меня к вам вопрос, всегда ли запрос возвращает 1 строку-

select w.IDPARTICIPANT, w.IDPWRISTBAND, w.BALANCE  
from WRISTBAND w, inserted i 
where w.IDPARTICIPANT = i.IDPARTICIPANT and w.ACTIVE = 1;

Если он возвращает 1 строку, тогда зачем использовать временную таблицу?

update WRISTBAND
set BALANCE = 
(
    w.BALANCE  
    from WRISTBAND w, inserted i 
    where w.IDPARTICIPANT = i.IDPARTICIPANT and w.ACTIVE = 1;
);
0 голосов
/ 15 декабря 2018

Я не обязательно вижу ошибку рядом с INTO #temp_s#, но я вижу ошибку в вашем UPDATE запросе.

Таблица #temp_s в подзапросе не связана сWRISTBAND таблица любым способом, поэтому вы можете получить ошибку там, если будет возвращено более 1 строки (, что, как я предполагаю, будет ).

update WRISTBAND
set BALANCE = 
(
    select t.BALANCE 
    from #temp_s t 
)

так что, я думаюэто выглядело бы лучше, если бы это было что-то вроде:

update w
set BALANCE = 
(
    select t.BALANCE 
    from #temp_s t
    where t.IDPARTICIPANT = w.IDPARTICIPANT 
)
FROM WRISTBAND w

Может быть, это так, поскольку SQL иногда ведет себя странно при выдаче сообщений об ошибках.Будет лучше, если вы отправите сообщение целиком.

...