误吞

2024-07-01 06:43:10 发布

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

问题

我正在与JayDeBeApi连接到SQL Server 2017,并运行一个脚本,如:

  1. 选择。。。放入临时工作台
  2. 从a表中删除
  3. 插入a表从“a-temp-table”中选择
  4. 删除#a-temp-table

在步骤3中,我得到以下错误:

Cannot insert duplicate key row in object 'dbo.a-table' with unique index 'UQ_a-table'. The duplicate key value is (11, 0001, 3751191, T70206CAT, 0000).

只插入~360k条记录,而不是~360k条记录。所以第3步中止。 但是临时表将被删除。所以第4步就完成了。在

我能修正这个错误。但是对于JayDeBeApi,我没有看到错误。 从Python的角度来看,似乎一切都很顺利。在

我的目标是捕捉这些错误以适当地处理它们。 有什么办法吗?在

我所做的一切

我的Python代码看起来像。在

try:
    localCursor = dbConnection.cursor()
    x = localCursor.execute(query)

    logInfo("Run script %s... done" % (scriptNameAndPath), "run script", diagnosticLog)
except Exception as e:
    logError("Error running sql statement " + scriptNameAndPath + ". Skipping rest of row.", 
        "run script", e, diagnosticLog)
    myrow = skipRowAndLogRecord(startRowTime, cursor, recordLog)
    continue

x = localCursor.execute(myqrystm)成功完成,因此不会引发异常。xNone,在检查{}时,我没有看到任何错误消息/代码的迹象


Tags: keyrun代码execute错误记录tablescript
2条回答

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017

  Create procedure to retrieve error information.  
CREATE PROCEDURE usp_GetErrorInfo  
AS  
SELECT  
ERROR_NUMBER() AS ErrorNumber  
,ERROR_SEVERITY() AS ErrorSeverity  
,ERROR_STATE() AS ErrorState  
,ERROR_PROCEDURE() AS ErrorProcedure  
,ERROR_LINE() AS ErrorLine  
,ERROR_MESSAGE() AS ErrorMessage;  
GO  

BEGIN TRY  
  Generate divide-by-zero error.  
SELECT 1/0;  
END TRY  
BEGIN CATCH  
  Execute error retrieval routine.  
EXECUTE usp_GetErrorInfo;  
END CATCH;   

步骤3应该是all或none,因此a-table应该在重复键错误之后为空,除非您的实际代码有一个WHERE子句。在

对于未检测到的异常,添加SET NOCOUNT ON作为脚本中的第一个语句。这将抑制DONE-IN-_-PROC消息,除非您的代码处理多个结果集,否则这些消息将干扰脚本执行。在

相关问题 更多 >

    热门问题