【问题标题】:Bulk Validation in SQL Server 2008 r2SQL Server 2008 r2 中的批量验证
【发布时间】:2013-12-18 19:19:43
【问题描述】:

我们有一个包含 18,000 个 ID 的 Excel 表。我们的数据库中有一个主表,其中 Excel 表中的这些 Id 可用。

由于它是由许多用户修改的 Excel 表,我们希望验证这 18,000 个 ID,并确保它是数据库中可用的有效 ID。但是我们不想通过一次传递一个 Id 来调用过程并验证 Id。这样,我们必须进行 18,000 次 DB 调用来验证所有 18,000 个 ID,所以我们不需要这样做。

还有其他推荐的方法来实现这一点吗?

我试过这个: 将所有 18,000 个 ID 作为表值参数传递给过程。 使用 SQL 合并概念。 目标表:具有所有 ID 的主表。 源表:表值参数。 条件:ON TargetTable.id = SourceTable.id 当不匹配时 -- 这里我不想更新、删除或插入到我的目标表,因为那是我们的主表,所以我们不希望任何 DML 语句反对该表。但是 SQL Merge 不允许我在这里使用其他表。所以这对我不起作用。

【问题讨论】:

  • 首先将 sql server 中的所有数据放在一个临时表中,然后通过(加入/合并)任何适合您的方式过滤掉不需要的行,然后对所有过滤的行进行操作。

标签: c# asp.net sql sql-server sql-server-2008


【解决方案1】:

执行此操作的最快方法是批量导入临时表,然后通过 excel 中的 ID 和参考表的 ID 连接该表。任何加入的都是有效的,没有加入的都是无效的。

有效的

SELECT * FROM ExcelDump inner join ReferenceTable on ExcelDump.Id = ReferenceTable.Id

无效的

SELECT * FROM ExcelDump inner join ReferenceTable on ExcelDump.Id <> ReferenceTable.Id

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多