2014-12-19 3 views
0

Нужна помощь с триггером.
Если я удалю свои внутренние соединения из того места, где он работает, поэтому я предполагаю, что это будет проблема. Если я использую это там, где он работает, «WHERE oeordhdr_sql.A4GLIdentity = @ id»Неисправность при запуске SQL

Любая помощь будет оценена. Ниже приведен код ...

ALTER trigger [dbo].[bdordermakeonhold] 
on [dbo].[oeordhdr_sql] 
for insert 
as 
declare @edi as char(1) 
declare @id as numeric(9,0) 
declare @ordno as char(8) 
declare @ordtype as char(1) 
declare @cus_no as char(12) 
declare @status as char(1) 
declare @ship_to_addr_3 as char(40) 
set @edi=(select edi_fg from inserted) 
set @id=(select a4glidentity from inserted) 
set @ordno=(select ord_no from inserted) 
set @ordtype=(select ord_type from inserted) 
set @cus_no=(select cus_no from inserted) 
set @status=(select status from inserted) 
set @ship_to_addr_3=(select status from inserted) 
set nocount on 
if @edi is null or @edi='E' 
if not exists (SELECT ID, Cus_No, State, CertificateID, Expiration FROM BDSalesTaxCerts  
WHERE State = 'FL' AND @cus_no = Cus_No) 

begin 
UPDATE oeordhdr_sql 
SET   status = 'C',hold_fg = 'H' 
FROM   inserted AS i INNER JOIN 
     oeordlin_sql AS LN ON LN.ord_no = i.ord_no INNER JOIN 
     ARCUSFIL_SQL as CS ON i.cus_no = CS.cus_no 
WHERE  oeordhdr_sql.A4GLIdentity [email protected] and cs.state not in ('FL','PR',' ','lima') and  
(LN.loc = 'SE') AND (@ship_to_addr_3 LIKE '%FL%') AND @status in ('1') 
if not exists (select ID from BDInvoiceSupport where [email protected] and orig_ord_type 
[email protected]) 
begin 
INSERT INTO [dbo].[BDInvoiceSupport] 
([ID] 
,[LastUpdate] 
,[RecordRevLevel] 
,[Inv_No] 
,[TaxProcessingStatus] 
,[Orig_Ord_no] 
,[orig_ord_type] 
,[InvoiceSent] 
,[OnHoldReason]) 
select NEWID(),GETDATE(),0,inv_no,0,ord_no,ord_type,0,'Not checked yet.' 
from inserted 
end 
end 
+0

Я думаю, вам нужна точка с запятой между операторами UPDATE и 'IF'. – Barmar

+0

Вы получаете сообщение об ошибке при попытке скомпилировать триггер или ошибку при запуске триггера. Какую ошибку вы получаете? – Spock

+0

Триггеры предназначены для работы со всеми затронутыми записями одновременно. Если несколько записей будут изменены, то вставленная таблица будет содержать более одной записи. В этом случае переменные сохраняют только одно значение, а вставленная таблица имеет много значений и может быть причиной ошибки или сбоя. Я бы рекомендовал не сохранять значения из вставленной таблицы в переменные, а скорее обрабатывать в определенном множестве. – Jeremy

ответ

0

Если сразу две строки вставлены, это даст вам проблемы. Вы должны записать его с помощью объединений в таблицу inserted вместо использования переменных.

Смежные вопросы