当从python执行时,存储过程在执行几个步骤后停止执行

2024-09-30 14:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python中的pyodbc调用python中的存储过程。它在几个语句后停止执行。你知道吗

  • 以前它并没有反映数据库中的变化。使用autocommit=True修复了该问题
  • 将步骤分为不同的两个单独的过程,然后就可以工作了。代码没问题
  • 我正在使用SQL Server 2017 RDS,在服务器上找不到任何需要指定的特定于时间的设置 如果知道在某些步骤之后停止存储过程执行的原因,那就太好了。你知道吗

在以下脚本中,它停止从表3执行\u trn处理:

SELECT  @l_cnt =  count(1)  
FROM   plutotrn.table3_trn

CREATE  OR ALTER PROCEDURE sp_load_data
AS 
DECLARE  @l_cnt  INT 
DECLARE  @def_schema NVARCHAR(20) ='dbo'
DECLARE  @transit_schema NVARCHAR(20)='trn_schema'
BEGIN  
SET NOCOUNT ON; 
 BEGIN TRY  
 SELECT  @l_cnt = count(1)    
 FROM   table1_trn 

 IF @l_cnt > 0    
 BEGIN   
    EXEC  sp_modify_indexes @table_name='table1',@schema_name=@def_schema,@enable_or_rebuild='DISABLE' ; 
    EXEC  sp_switch_partitions  @source_table = 'table1_trn' , @target_table = 'table1' ,@src_schema_name=@transit_schema ,@tgt_schema_name =@def_schema    
 END  


 SELECT  @l_cnt =  count(1)  
 FROM   plutotrn.table2_trn 

  IF @l_cnt > 0  
  BEGIN 
    EXEC  sp_modify_indexes @table_name='table2',@schema_name=@def_schema,@enable_or_rebuild='DISABLE' ; 
    EXEC  sp_switch_partitions  @source_table = 'table2_trn' , @target_table = 'table2' ,@src_schema_name=@transit_schema ,@tgt_schema_name =@def_schema  
 END

 SELECT  @l_cnt =  count(1)  
 FROM   plutotrn.table3_trn 

  IF @l_cnt > 0  
  BEGIN 
    EXEC  sp_modify_indexes @table_name='table3',@schema_name=@def_schema,@enable_or_rebuild='DISABLE' ; 
    ALTER TABLE table3  NOCHECK CONSTRAINT ALL ;
    ALTER TABLE  table3_trn NOCHECK CONSTRAINT ALL ;

    EXEC  sp_switch_partitions  @source_table = 'table3_trn' , @target_table = 'table3' ,@src_schema_name=@transit_schema ,@tgt_schema_name =@def_schema  


 END TRY
 BEGIN CATCH
   INSERT INTO debug VALUES (concat(ERROR_NUMBER(),ERROR_LINE (),ERROR_MESSAGE()))
 END CATCH 
END;

Tags: namefromschemadefcounttableselectsp
1条回答
网友
1楼 · 发布于 2024-09-30 14:24:26

我已经解决了这个问题,在python调用过程并执行过程中的所有步骤之后,增加了2分钟的睡眠时间成功。五月这不是最好的解决办法,但对我有用。你知道吗

相关问题 更多 >