Sql server 2008 在经典ASP和ADO中创建批处理更新
我有一个ASP表单,它带来了一些我想要修改然后更新的记录。目前,更新是通过DLL一次更新一次,DLL只需构建一条SQL语句并为每条记录调用数据库 现在,我需要在SQL中进行检查,以确保没有从给定的建筑中删除最后一种类型的位置。这样,我有5个工作区,如果我试图将所有这些工作区都转换为办公室,我会得到一个错误,即每层至少需要一个工作区,SQL应该在不更新任何行的情况下结束。当前,它将更新每一行直到最后一行,然后抛出错误Sql server 2008 在经典ASP和ADO中创建批处理更新,sql-server-2008,asp-classic,ado,batch-updates,Sql Server 2008,Asp Classic,Ado,Batch Updates,我有一个ASP表单,它带来了一些我想要修改然后更新的记录。目前,更新是通过DLL一次更新一次,DLL只需构建一条SQL语句并为每条记录调用数据库 现在,我需要在SQL中进行检查,以确保没有从给定的建筑中删除最后一种类型的位置。这样,我有5个工作区,如果我试图将所有这些工作区都转换为办公室,我会得到一个错误,即每层至少需要一个工作区,SQL应该在不更新任何行的情况下结束。当前,它将更新每一行直到最后一行,然后抛出错误 有人向我指出,我应该尝试批处理SQL或更新作业,但我不知道该怎么做。有什么提示吗
有人向我指出,我应该尝试批处理SQL或更新作业,但我不知道该怎么做。有什么提示吗?如果某些业务规则失败,您可以链接多个命令并抛出错误 类似(伪代码,未测试): 如果执行批处理,所有语句都将在事务中运行,如果出现错误,数据库将不会更新
免责声明:只是一个想法,没有经过测试。您的意思是创建SQL事务以便在出现问题时允许回滚吗?你能更详细地描述一下这句话吗:“确保我没有从给定的建筑中删除最后一种类型的位置”?我试图通过事务锁定它,但它似乎不起作用。和中一样,当我尝试更新多个记录时,它会给我错误。我所说的话的意思是…我在一栋楼的一层里面有位置。他们有一种类型(工作场所、办公室、厨房等)。每个楼层必须至少有一个工作区,因此我必须限制用户进行更改,以删除楼层的最后一个工作区。如果他们试图进行大量更改并提交这些更改,而这些更改将删除最后一个工作区,我必须停止所有这些更改。
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);"