Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用大容量插入/更新/删除时,如何跟踪失败的CRUD行?_C#_Sql_Sql Server_Merge_Bulk - Fatal编程技术网

C# 使用大容量插入/更新/删除时,如何跟踪失败的CRUD行?

C# 使用大容量插入/更新/删除时,如何跟踪失败的CRUD行?,c#,sql,sql-server,merge,bulk,C#,Sql,Sql Server,Merge,Bulk,我试图弄清楚如何在SQLDatbase中的表上执行批量操作,以便能够处理失败的行 假设我在一个表中批量插入了10行,第5行有一些错误数据,无法插入。然后,我希望插入其他9行,但以某种方式可以得到无法插入的1行作为返回,这样我就可以将这一行存储在某个地方,以便以后进行错误处理 如果我能使用一些nuget软件包进行C#编程,那就太好了。我想你可以使用触发器而不是插入,检查数据是否有效。如果不是,您可以将其保存在另一个表中,从该表中检索有错误的行,如果该行中没有错误,您可以将其插入原始表中。通常,最理

我试图弄清楚如何在SQLDatbase中的表上执行批量操作,以便能够处理失败的行

假设我在一个表中批量插入了10行,第5行有一些错误数据,无法插入。然后,我希望插入其他9行,但以某种方式可以得到无法插入的1行作为返回,这样我就可以将这一行存储在某个地方,以便以后进行错误处理


如果我能使用一些nuget软件包进行C#编程,那就太好了。

我想你可以使用触发器而不是插入,检查数据是否有效。如果不是,您可以将其保存在另一个表中,从该表中检索有错误的行,如果该行中没有错误,您可以将其插入原始表中。

通常,最理想的解决方案是在过程中尽早验证坏数据。考虑以下策略:

  • 在c#代码中创建一个datatable,其中datacolumns与需要持久化数据的目标表的datatype、length、nullable等精确匹配。如果任何数据不一致,它将在尝试插入数据表时引发异常
  • 从源数据填充datatable,一次填充一行数据。如果一行未能插入到datatable中,则异常处理可以捕获该行并根据需要记录该数据
  • 在SQL Server中创建自定义表值类型以匹配datatable。确保所有内容都匹配,包括每个数据列的所有元数据
  • 在SQL Server上创建包含表值输入参数的存储过程。此参数将是在步骤3中创建的新自定义类型。然后,可以使用表值参数将数据快速插入数据库表
  • 将数据表作为参数值传递给存储过程。数据类型应为SqlDbType.Structured

  • 此设计通过早期输入验证提高了速度和效率,同时允许流程批量传递数据,允许快速插入。

    您考虑过吗?Integration services允许您将数据从源传输到目标。失败的行可以选择性地重定向到其他目标。谢谢!这是一个聪明的解决方案!:)