1
트리거를 통해 저장 프로 시저를 실행하여 데이터베이스에 삽입 된 순서대로 주문을 인쇄하려고합니다. 저장 프로 시저를 수동으로 실행하면 20 초 이내에 완료됩니다. 방아쇠에서 실행하면 결코 완료되지 않습니다.트리거에서 호출 한 저장 프로 시저가 실행되지 않습니다.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ARITHABORT OFF
GO
CREATE PROCEDURE [dbo].[usr_despatch_m2] @order VARCHAR(10)
AS
SET XACT_ABORT ON
SET NOCOUNT ON
--DROP TABLE #bundle (bundle int)
DECLARE @sql VARCHAR(1000), @result INT, @text varchar(1000)
SET @sql = 'D:\csserver\bin\runvtorddesp_m.bat '[email protected]
-- set @sql = 'command.com /c sdespatch '+ @order
EXEC @result = master..xp_cmdshell @sql, no_output
IF @result in (0,1010)
BEGIN
EXEC manufg.dbo.op_populate_shipping_data_dev @order
IF @order LIKE '[T,Y,R,S]%'
BEGIN
EXEC [SERVER2].sp_manufg.[dbo].[pod_print_can_inv] @order
END
SET @sql = 'command.com /c PRINT /D:\\SERVER1\MEM-SHIPPING-INVOICE \\SERVER1\e$\PODPDF\'+rtrim(@order)+'.PDF'
EXEC @result = master..xp_cmdshell @sql, NO_OUTPUT
END
BEGIN
SET @text = (SELECT
CASE @result
WHEN 0 THEN 'Order despatched successfully'
WHEN 1010 THEN 'Order despatched successfully'
WHEN 1 THEN 'Order error not found in order header'
WHEN 2 THEN 'Order at incorrect status'
WHEN 3 THEN 'Order despatch held'
WHEN 4 THEN 'Order is not web order'
WHEN 5 THEN 'Order not fully processed by DataLinx'
WHEN 6 THEN 'Order is in error'
WHEN 7 THEN 'Order is in error'
WHEN 8 THEN 'Order header is locked'
WHEN 9 THEN 'Stock item is locked'
WHEN 13 THEN 'Order number not found'
WHEN 33 THEN 'Unable to lock stock allocations (stallocm)'
WHEN 34 THEN 'Unable to lock stock batch file (stquem)'
WHEN 40 THEN 'Unable to update EIPOLASTDT system key'
WHEN 50 THEN 'Unable to unlock EDI order'
ELSE 'Order in error'
END)
SET @text = rtrim(@order) +' ' + @text
SET @sql = 'echo ' + @text + ' > E:\DespatchErrors\Manufg\'+rtrim(@order)+'.txt'
EXEC @result = master..xp_cmdshell @sql, no_output
SET @sql = 'command.com /c PRINT /D:\\SERVER1\MEM-SHIPPING-INVOICE \\SERVER1\e$\DespatchErrors\MANUFG\'+rtrim(@order)+'.txt'
EXEC @result = master..xp_cmdshell @sql, NO_OUTPUT
END
트리거는 단순히
ALTER TRIGGER [dbo].[usr_order_despatch_m_c] on [dbo].[pod_mfg_inv]
instead of insert
as
SET XACT_ABORT ON
SET NOCOUNT ON
DECLARE @order varchar(10)
SET @order = (select order_no from inserted)
EXEC usr_despatch_m2 'T568138'
것을
GO
SET QUOTED_IDENTIFIER ON
SET XACT_ABORT ON
SET ARITHABORT ON
GO
ALTER PROCEDURE [dbo].[pod_print_can_inv]
@myOrder CHAR(10)
AS
DECLARE
@mySql VARCHAR(1000),
@result INT
BEGIN
--Select the right report since Trade invoices are different to Retail dispatch notes
IF @myOrder LIKE 'R%'
BEGIN
SET @mySql = 'dtsrun /S SERVER2 /E /N PODCanRetailInvPDF /A "myFilter":"8"="(lfdinv = ""' + RTRIM(@myOrder) + '"")"'
END
-- Canadian Battle For Vedros Invoices
IF @myOrder LIKE 'Y%'
BEGIN
SET @mySql = 'dtsrun /S SERVER2 /E /N PODVedrosInvoiceWithTerms /A "myFilter":"8"="(lfdinv = ""' + RTRIM(@myOrder) + '"")"'
END
-- Canadian Trade Invoices
ELSE
BEGIN
SET @mySql = 'dtsrun /S SERVER2 /E /N PODCanTradeInvWithTerms /A "myFilter":"8"="(lfdinv = ""' + RTRIM(@myOrder) + '"")"'
END
EXEC @result = master..xp_cmdshell @mySql, NO_OUTPUT
IF @result = 0 BEGIN
WAITFOR DELAY '00:00:01'
SET @mySql = 'DEL \\SERVER1\E$\PODPDF\TST\' + RTRIM(@myOrder) + '.pdf'
EXEC @result = master..xp_cmdshell @mySql, NO_OUTPUT
WAITFOR DELAY '00:00:01'
SET @mySql = 'REN \\SERVER1\E$\PODPDF\TST\PDFCreatorDocument.pdf ' + RTRIM(@myOrder) + '.pdf'
EXEC @result = master..xp_cmdshell @mySql, NO_OUTPUT
WAITFOR DELAY '00:00:01'
-- Stop MSAccess on the server
SET @mySql = 'PSKILL msaccess.exe'
EXEC master..xp_cmdshell @mySql, NO_OUTPUT
WAITFOR DELAY '00:00:10'
/*
IF @myOrder LIKE 'Y%'
BEGIN
SET @mySql = 'COMMAND AcroRd32.exe /t "\\SERVER1\E$\PODPDF\TST\' + RTRIM(@myOrder) + '.pdf" "\\SERVER1\BACKOFFICE" "Canon iR-ADV C5235/5240 PCL5c" "IP_172.16.235.100"'
EXEC master..xp_cmdshell @mySql, NO_OUTPUT
END*/
SET @mySQL = 'MOVE \\SERVER1\E$\PODPDF\TST\'+RTRIM(@myOrder)+'.pdf \\SERVER1\E$\PODPDF'
EXEC @result = master..xp_cmdshell @mySQL, NO_OUTPUT
WAITFOR DELAY '00:00:05'
END
END
가 DTS 패키지는 원격 서버 및 생성에 액세스 데이터베이스를 여는이다 늦추지 것으로 보인다 저장된 절차 양식. 방금 저장 프로 시저를 실행하면이 기능이 빠르게 작동하지만 트리거를 사용하면 완료되지 않습니다.
HELP !!!
정말 SQL 2000과 DTS를 사용하고 있습니까? –
아니요,하지만 회사는 현재 업데이트 할 수 없습니다. –
데이터가 아직 커밋되지 않았으므로 트리거에서이 작업을 수행 할 수 없습니다. 지원되는 모든 버전의 SQL Server에서 IDENTITY 키를 사용하여 다른 테이블에 해당 명령을 작성하고 백그라운드 작업에서 해당 테이블을 순서대로 읽고 명령을 실행해야합니다. 그것도 SQL 2000에서 작동하는지 여부를 말할 수 없다 :) –