【问题标题】:Creating Batch update in Classic ASP and ADO在经典 ASP 和 ADO 中创建批量更新
【发布时间】:2010-08-20 14:02:01
【问题描述】:

我有一个 ASP 表单,其中包含一些我想要修改然后更新的记录。目前,更新通过 DLL 进行一次一次更新,该 DLL 只需构建一条 SQL 语句并为每条记录调用数据库。

现在,我需要在 SQL 中进行检查,以确保我不会从给定的建筑物中删除最后一种类型的位置。这样我有 5 个工作场所,如果我试图将所有这些工作场所变成办公室,我应该会收到一条错误消息,说我每层至少需要一个工作场所,并且 SQL 应该结束而不更新任何行。目前,它会更新每一行直到最后一行,然后抛出错误。

有人向我指出我应该尝试批量处理 SQL 或更新,但我不知道该怎么做。请问有什么提示吗?

【问题讨论】:

  • 您的意思是创建一个 SQL 事务以便在出现问题时允许回滚吗?您能否详细说明一下这句话:“确保我不会从给定的建筑物中删除最后一种类型的位置”?
  • 我试图通过事务锁定它,但它似乎不起作用。例如,当我尝试更新不止一条记录时,它给了我错误。我所说的那句话是什么意思...我在建筑物的一层内有位置。他们有一个类型(工作场所、办公室、厨房等)。每个楼层必须至少有一个工作场所,因此我必须限制用户进行更改以删除楼层的最后一个工作场所。如果他们尝试进行大量更改并尝试提交这些更改,而这些更改会删除最后一个工作场所,我必须停止所有这些更改。

标签: sql-server-2008 asp-classic ado batch-updates


【解决方案1】:

如果某些业务规则失败,您可以链接多个命令并引发错误

类似(伪代码,未经测试):

For i = 0 to ubound(Items) - 1
  stmt = stmt + " UPDATE BuildingFloor set Type=" + Items(i).Type + " WHERE ID=" + Items(i).ID + ";"
next
stmt = stmt + " IF NOT EXISTS(SELECT * FROM BuildingFloor"
stmt = stmt + " WHERE Type = 'WorkPlace') RAISERROR ('Must have a workplace', 16, 1);"

如果你执行批处理,所有语句都将在一个事务中运行,如果出现错误,数据库将不会更新。

免责声明:只是一个想法,未经测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2011-06-08
    相关资源
    最近更新 更多