即使循环中发生错误如何继续游标循环

2024-01-07

我想将一个表的行插入到另一个表中。为此,我有以下程序。

ALTER PROCEDURE LOADDATA_a
AS 
BEGIN

TRUNCATE TABLE STIDENT_A
DECLARE @SID INT
DECLARE @SNAME VARCHAR(50)
DECLARE @SUB VARCHAR(50)
DECLARE @MARKS INT

DECLARE LOAD_DATA CURSOR FAST_FORWARD FOR  
SELECT SID,SNAME,SUB,MARKS 
FROM student 

OPEN LOAD_DATA   
FETCH NEXT FROM LOAD_DATA INTO @SID,@SNAME,@SUB,@MARKS

WHILE @@FETCH_STATUS = 0   
BEGIN
    BEGIN TRANSACTION

    INSERT INTO STIDENT_A(SID,SNAME,SUB,MARKS) VALUES (@SID,@SNAME,@SUB,@MARKS)

    IF @@ERROR != 0
    BEGIN
        ROLLBACK TRANSACTION
        RETURN
    END
    ELSE
    BEGIN
        COMMIT TRANSACTION
    END
    FETCH NEXT FROM LOAD_DATA INTO @SID,@SNAME,@SUB,@MARKS
END

CLOSE LOAD_DATA   
DEALLOCATE LOAD_DATA

END

每当插入一行失败时,游标就会失败并停在那里,但我需要它继续。怎么做?


显然,你有一个RETURN紧随其后的声明ROLLBACK TRANSACTION。您是否尝试过将其删除?

虽然你也可以使用重写主体TRY/CATCH相反,像这样:

...
WHILE @@FETCH_STATUS = 0   
BEGIN
    BEGIN TRY
        INSERT INTO STIDENT_A(SID,SNAME,SUB,MARKS)
        VALUES (@SID,@SNAME,@SUB,@MARKS);
    END TRY
    BEGIN CATCH
      -- this section must have some statement,
      -- so, why not log the erroneous data to the screen at least?
      PRINT @SID;
      PRINT @SNAME;
      PRINT @SUB;
      PRINT @MARKS;
      PRINT '';  -- an empty line as a delimiter
      -- or, perhaps, into a table?
      --INSERT INTO SomeFailLog (SID,SNAME,SUB,MARKS)
      --VALUES (@SID,@SNAME,@SUB,@MARKS);
    END CATCH;
    FETCH NEXT FROM LOAD_DATA INTO @SID,@SNAME,@SUB,@MARKS;
END;
...

但是,如果您知道具体是什么可能导致插入失败,那么最好提出一个仅生成要插入的有效数据的语句。

例如,如果问题是某些 SIDstudent已经存在于STIDENT_A并且您需要忽略它们,您可以简单地尝试以下操作而不是你的程序:

INSERT INTO STIDENT_A (SID, SNAME, SUB, MARKS)
SELECT s.SID, s.SNAME, s.SUB, s.MARKS
FROM student AS s
LEFT JOIN STIDENT_A AS a ON s.SID = a.SID
WHERE a.SID IS NULL
;

如果您具体说明传输数据时可能出现的问题,我们也许能够帮助您找到专门针对该问题的最有效的解决方案。


UPDATE处理评论

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使循环中发生错误如何继续游标循环 的相关文章

随机推荐

  • 使用 ID 获取 AmChart 实例 / AmCharts4 Angular-Typescript 中的所有图表

    之前我们使用 this AmCharts 获取它们 AmCharts为我们提供了AmChartsService 通过它我们可以获取dom中的所有图表 升级后获取页面中所有图表的新方法是什么 None
  • 如何在全日历中设置外部事件的持续时间

    我正在尝试将 fullcalendar 与外部事件一起使用 我按照拖放外部事件的示例进行操作 这正是我所需要的 并且示例很好 我可以拖动外部事件并将其放在日历上 它们被转化为事件 但问题是它们都是 60 分钟长 我想更改这个值 但我找不到如
  • Javascript 获取附加了处理程序的元素

    当在元素上触发 onclick 事件时 如何从事件对象中获取事件附加到的元素 与单击的 target 元素相对 您可以访问currentTarget财产 https developer mozilla org en US docs Web
  • 如何使用纯 Javascript 删除父元素

    如何使用纯 JavaScript 删除父元素和所有相应节点 我没有使用 jQuery 或任何其他库 换句话说 我有一个元素 当用户单击它时 我想删除父元素的父元素 以及相应的子节点 table tr td Mohit td td 23 td
  • 如何在Windows中正确构建opencv以获得“opencv_createsamples.exe”

    我想学习和使用 haarcascade 分类器 使用 OpenCV 来检测我选择的对象 我在网上搜索发现createsamples实用程序有助于创建正像和负像图像的数据集 我知道如何在 python 中安装 OpenCV pip insta
  • 将 firebase 添加到代号一

    我正在使用 Codename One 框架开发我的应用程序 并使用 Firebase 将我的数据存储在云中 为了利用 Firebase 的所有潜力 我想将其添加到我的应用程序中 但由于我没有使用 Android Studio 或 Xcode
  • Terraform (0.12.29) 导入未按预期工作;导入成功,但计划显示销毁并重新创建

    一些背景 我们有 terraform 代码来创建各种 AWS 资源 其中一些资源是根据 AWS 账户创建的 因此被构造为存储在account scope我们项目中的文件夹 当时我们只有一个 AWS 区域 现在我们的应用程序是多区域的 因此将
  • 将 Subsonic.Select() ExecuteTypedList 方法与字符串结合使用

    这更多是关于泛型而不是亚音速的问题 想象一下如果有以下代码 List
  • Java 中的 IDisposable 隐喻?

    作为一名进入 NET 的 Java 开发人员 我想了解 IDisposable 接口 有人可以尝试解释一下这一点以及它与 Java 中发生的情况有何不同吗 谢谢 我写了一个关于 IDisposable 的详细系列文章 http reedco
  • Amazon Lex 在 Lambda Fulfillment 上 30 秒超时

    我有一个 lambda 函数 它通过网络服务与一些外部自动化绑定 完成任务大约需要 45 秒 我已经将 lambda 调用的时间限制更新为 2 分钟 并且当我测试时它工作正常 但是 当我在 Amazon Lex 中使用文本机器人时 我收到以
  • HtmlUnit 从 href 调用 javascript 来下载文件

    我尝试下载一个似乎必须通过浏览器单击的文件 该网站使用一个表单 其中包含多个指向名为 downloadFile 的 javascript 函数的 href 在此函数中 通过 document getElementById 获取名为 posl
  • Android APK 运行时不会生成

    我有几个 Android 应用程序和示例代码 我已经下载 编码了 所有这些都在我的 eclipse 工作区中 我已经在 eclipse 上安装了 android 开发所需的所有插件 图像 这些项目可以在您进行构建时完美编译 我得到 构建成功
  • 容器“Android 依赖项”引用不存在的库

    请原谅我的英语不好 我是法国人 所以 我的 android 项目遇到了问题 我收到此错误容器 Android 依赖项 引用不存在的库 我在谷歌上进行了大量搜索 结果是 该库是一个android库 大小写已勾选 该库在我的项目中被 调用 An
  • 有没有办法通过Python(pywin32)访问Excel上的切片器

    我正在使用 pywin32 Excel 工作簿 我在一张纸上有一些图表需要保存 问题是 该工作表中有一个切片器 可以过滤某个变量 我没有找到它的 pywin32 文档 而且我在这里没有任何关于我可以 或不能 如何做到这一点的线索 谢谢 有对
  • 适用于 .NET 的 SAML 库/组件

    任何人都可以推荐用于为 NET 中的联合登录实现生成 SAML 断言的库吗 如果它能与 ASP NET 会员 API 集成 那就更理想了 如果其他人偶然发现这一点 http saml2 codeplex com http saml2 cod
  • FTP 目录列表以 HTML 形式返回,而不是简单的 Linux ls 输出

    相关如何强制 C FtpWebRequest 使用直接 IP 访问 Internet 而不是通过 HTTP 代理 https stackoverflow com questions 28187521 how can i force a c
  • 为什么我不能在类外部重载 C++ 转换运算符作为非成员函数?

    这个问题以前曾被问过 但我觉得提问者在从未真正得到真正答案的情况下匆忙地认为答案是正确的 也许没有什么原因 这需要稍后纳入标准 你告诉我 不允许使用非成员函数重载 C 转换运算符的理由是什么 https stackoverflow com
  • wait() 在 Unix 上做什么?

    我正在读关于wait Unix 系统书中的函数 本书包含一个程序 该程序具有wait NULL 在里面 我不明白那是什么意思 在其他程序中有 while wait NULL gt 0 这也让我摸不着头脑 有人能解释一下上面的函数在做什么吗
  • 在 mac 上使用 macport 安装时 boost 库的默认位置是什么?

    我刚刚在 mac 上安装了 boost 使用 macport 和以下命令 sudo port install boost 它安装得很好 但我不知道 boost 库安装在哪里 它应该在哪里 我怎样才能找到它 标题应该位于 usr local
  • 即使循环中发生错误如何继续游标循环

    我想将一个表的行插入到另一个表中 为此 我有以下程序 ALTER PROCEDURE LOADDATA a AS BEGIN TRUNCATE TABLE STIDENT A DECLARE SID INT DECLARE SNAME VA