2016-06-14 2 views
-5
create trigger suadulieu22 
on SACH 
for update 
as 
    if UPDATE(MaTG) or UPDATE(MaNXB) 
    begin 
     rollback tran 
     print ('khong cho phep sua du lieu o cot MaTG va MaNXB') 
    end 

    if UPDATE(DonGia) 
     if((select DonGia from inserted) >= 3600) 
     begin 
      rollback tran 
      print 'don gia moi phai khong vuot qua 20% don gia cu ' 
     end 

    update SACH 
    set MaNXB = 'nxb1' 
    where MaTG = 'tg1' and MaNXB = 'nxb1' 

    update SACH 
    set DonGia = 3060 
    where MaTG = 'tg1' and MaNXB = 'nxb1' 

Пожалуйста, помогите мне, я получаю эту ошибку:SQL Server Subquery

Msg 512, Level 16, State 1, Procedure suadulieu, Line 11
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

if UPDATE(DonGia) 
     if((select DonGia from inserted) >= (select DonGia from inserted)*1.2) 
     begin 
      rollback tran 
      print 'don gia moi phai khong vuot qua 20% don gia cu ' 
     end 
update SACH 
set DonGia = 3060 
where MaTG = 'tg1' and MaNXB = 'nxb1' 
+2

Триггеры запускают отчет за SQL Server, а не за строку. 'if ((выберите DonGia из вставленного)> = 3600)' wont корректно работать для многократных обновлений. –

+3

'вставленный' может содержать 0, 1 или * несколько строк. Итак, что вы ожидаете от '(выберите DonGia из вставленного)', чтобы вернуться, и как эти значения могут быть сопоставлены с 3600. * Некоторые из них могут соответствовать этому условию. * некоторые * не могу. –

+0

Можете ли вы помочь мне исправить это? – tienoho

ответ

0

Вы должны использовать здесь существует в вашей условной проверки. Скорее всего, что-то вроде этого. Без подробностей невозможно понять, что вы пытаетесь сделать.

if EXISTS(
select MAX(DonGia) 
from inserted 
having MAX(DonGia) >= (select MIN(DonGia) * 1.2 from inserted) 
) 
+0

и запустить: «cập nhật SACH bộ DonGia = 3060 nơi MaTG = 'TG1 и MaNXB =' nxb1 '" – tienoho