2014-12-02 10 views
2

SQL 프로 시저를 유용하게 호출하는 데 문제가 있습니다. 프로 시저에 커서가 있습니다. 이 커서는 Dynamics GP 프로 시저 'taComputerChecklineinsert'를 호출하는 다른 프로 시저를 호출하는 것으로 가정합니다. 작업은 전체 프로세스가 급여 트랜잭션 항목에 트랜잭션을 삽입해야한다고 가정합니다. 고정 된 수의 42 트랜잭션 만 삽입됩니다. 42 개가 넘는 거래가 있습니다. 동일한 매개 변수를 사용하여 SQL 서버에서 동일한 절차를 실행하면 필요한 결과가 제공됩니다. 이 문제는 내가 손재주를 부르면 나옵니다. 뭐가 잘못 될 수 있니? ... 나는 오랫동안이 일을 해왔다. 문제를 이해할 수 없다.GP proc은 42 개의 트랜잭션 만 실행합니다. - SQL 프로 시저에 대한 민첩성 호출에 커서가 있습니다.

+0

는, 커서, 나머지 동작을 위해 완벽하게 잘 작동합니다. 커서로부터 econnect proc를 호출 할 때 아무런 문제가 없다고 결론 지었다. 'taComputerChecklineinsert'에 대한 민첩성 호출을 통해 무언가를해야합니다. – msgpdev10

+0

'taCreatePayrollBatchHeaderInsert'를 사용하여 만든 경우 문제가 일괄 생성과 관련이 있습니다.이 프로세스는 트랜잭션 수를 제한합니다. 현재 수동으로 일괄 처리 헤더를 만들려고했습니다. taComputerChecklineinsert에 대한 호출에서이 배치 헤더가 지정되면 필요한 모든 트랜잭션이 삽입됩니다. – msgpdev10

답변

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