SQL 프로 시저를 유용하게 호출하는 데 문제가 있습니다. 프로 시저에 커서가 있습니다. 이 커서는 Dynamics GP 프로 시저 'taComputerChecklineinsert'를 호출하는 다른 프로 시저를 호출하는 것으로 가정합니다. 작업은 전체 프로세스가 급여 트랜잭션 항목에 트랜잭션을 삽입해야한다고 가정합니다. 고정 된 수의 42 트랜잭션 만 삽입됩니다. 42 개가 넘는 거래가 있습니다. 동일한 매개 변수를 사용하여 SQL 서버에서 동일한 절차를 실행하면 필요한 결과가 제공됩니다. 이 문제는 내가 손재주를 부르면 나옵니다. 뭐가 잘못 될 수 있니? ... 나는 오랫동안이 일을 해왔다. 문제를 이해할 수 없다.GP proc은 42 개의 트랜잭션 만 실행합니다. - SQL 프로 시저에 대한 민첩성 호출에 커서가 있습니다.
2
A
답변
1
마지막으로 해결되었습니다. 'taCreatePayrollBatchHeaderInsert'및 'taComputerChecklineinsert'와 같은 두 가지 econnect 프로 시저 중 아무 것도 사용하지 않습니다.
taCreatePayrollBatchHeaderInsert에 의한 일괄 생성 전에 select 문으로 인해 발생했습니다. select 문은 taCreatePayrollBatchHeaderInsert에 대한 매개 변수를 선택하기위한 위치에있었습니다.
코드는 select 문에 주석을 달았을 때 완벽하게 작동했습니다. 이 테이블에 거래 필요한 수의 삽입으로 내가 커서에서 taComputerChecklineinsert에을 eConnect의 프로 시저 호출을 제외하는 것을 시도했다
CREATE PROC [dbo].[GTG_PR_Create_ABS_Trx]
@CMPANYID INT
, @UPRBCHOR INT -- 1 = Computer Check , 2 = Manual Check
, @BACHNUMB CHAR(15)
, @EMPLOYID CHAR(15)
, @COMPTRTP SMALLINT -- Computer transaction type:1 = Pay code; 2 = Deduction; 3 = Benefit
, @SALCHG SMALLINT -- Salary change ; required if passing a salary pay code:1 = Reallocate dollars; 2 = Reallocate hours;3=Reduce dollars;4=Reduce hours;=5=Additional amount
, @UPRTRXCD CHAR(6) -- (OT , ABS)
, @TRXBEGDT DATETIME
, @TRXENDDT DATETIME
, @Amount NUMERIC(19 , 5) -- Amount
, @ProcessStatus INT OUT
, @ErrorState INT OUT
, @ErrString VARCHAR(255) OUT
AS
set @ErrorState = 0
set @ErrString = ''
-- Create batch if it doesn`t exist
IF NOT EXISTS(SELECT 1 FROM DYNAMICS..UPR10304 WHERE BACHNUMB = @BACHNUMB AND CMPANYID = @CMPANYID AND UPRBCHOR = @UPRBCHOR)
BEGIN
**--SELECT @BACHNUMB
-- ,@UPRBCHOR
-- ,@ErrorState
-- ,@ErrString**
EXEC taCreatePayrollBatchHeaderInsert
@I_vBACHNUMB = @BACHNUMB
, @I_vUPRBCHOR = @UPRBCHOR
, @O_iErrorState = @ErrorState OUT
, @oErrString = @ErrString OUT
-- Associate employee deduction code if association doesn`t exist
IF NOT EXISTS(SELECT 1 FROM UPR00500 WHERE EMPLOYID = @EMPLOYID AND DEDUCTON = @UPRTRXCD)
BEGIN
EXEC taCreateEmployeeDeduction
@I_vEMPLOYID = @EMPLOYID
, @I_vDEDUCTON = @UPRTRXCD
, @O_iErrorState = @ErrorState OUT
, @oErrString = @ErrString OUT
END
-- Create Transaction
EXEC taCreateComputerCheckLineInsert
@I_vBACHNUMB = @BACHNUMB
, @I_vEMPLOYID = @EMPLOYID
, @I_vCOMPTRTP = @COMPTRTP
, @I_vSALCHG = @SALCHG
, @I_vUPRTRXCD = @UPRTRXCD
, @I_vTRXBEGDT = @TRXBEGDT
, @I_vTRXENDDT = @TRXENDDT
, @I_vVARDBAMT = @Amount
, @O_iErrorState = @ErrorState OUT
, @oErrString = @ErrString OUT
END
GO
는, 커서, 나머지 동작을 위해 완벽하게 잘 작동합니다. 커서로부터 econnect proc를 호출 할 때 아무런 문제가 없다고 결론 지었다. 'taComputerChecklineinsert'에 대한 민첩성 호출을 통해 무언가를해야합니다. – msgpdev10
'taCreatePayrollBatchHeaderInsert'를 사용하여 만든 경우 문제가 일괄 생성과 관련이 있습니다.이 프로세스는 트랜잭션 수를 제한합니다. 현재 수동으로 일괄 처리 헤더를 만들려고했습니다. taComputerChecklineinsert에 대한 호출에서이 배치 헤더가 지정되면 필요한 모든 트랜잭션이 삽입됩니다. – msgpdev10