2010-08-20 47 views
1

我有一个ASP表单,它带来了一些我想修改然后更新的记录。目前,更新通过DLL的一次一次更新发生,只需构建一条SQL语句并为每条记录调用数据库即可。在传统ASP和ADO中创建批量更新

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

有人向我指出我应该尝试批处理SQL或更新,但我不知道该如何去做。请提供任何提示?

+0

您的意思是创建一个SQL事务,以便在出现问题时允许回滚?你能否再详述一下这句话:“确保我没有摆脱特定建筑物的最后一类位置”? – jdecuyper 2010-08-20 14:22:31

+0

我试图通过事务锁定它,但它似乎没有工作。如在,当我试图更新一条记录时,它给了我错误。我的意思是......我在建筑物的地板内有地点。他们有一个类型(工作场所,办公室,厨房等)。每个楼层至少有一个工作场所,所以我必须限制用户进行更改,以去除地板上的最后一个工作场所。如果他们尝试进行大量更改并尝试提交这些更改,并且这些更改会删除最后一个工作场所,那么我必须停止所有这些更改。 – CrystalBlue 2010-08-20 15:32:03

回答

0

你可以连续几个命令,并抛出一个错误,如果一些业务规则失败

类似的信息(伪代码,未测试):

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);" 

如果执行批处理,所有的句子在事务中运行,如果发生错误,数据库将不会更新。

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