Создание пакетного обновления в Classic ASP и ADO

У меня есть форма ASP, которая содержит ряд записей, которые я хочу изменить, а затем обновить. В настоящее время обновления выполняются по одному через библиотеки DLL, которые просто создают оператор SQL и вызывают базу данных для каждой записи.

Теперь мне нужно поставить проверку в SQL, чтобы убедиться, что я не избавлюсь от последнего типа местоположения из данного здания. Например, у меня 5 рабочих мест, и если я попытаюсь превратить все эти рабочие места в офисы, я должен получить сообщение о том, что мне нужно хотя бы одно рабочее место на этаж, и SQL должен завершиться без обновления каких-либо строк. В настоящее время он обновляет каждую строку до последней, а затем выдает ошибку.

Кто-то указал мне, что я должен попытаться выполнить пакетное задание SQL или обновить его, но я не знаю, как мне это сделать. Любые подсказки, пожалуйста?


person CrystalBlue    schedule 20.08.2010    source источник
comment
Вы имеете в виду создать транзакцию SQL, чтобы разрешить откат, если что-то пойдет не так? Не могли бы вы уточнить предложение: чтобы убедиться, что я не избавлюсь от последнего типа локации из данного здания?   -  person jdecuyper    schedule 20.08.2010
comment
Я попытался заблокировать его транзакцией, но, похоже, это не сработало. Например, это выдавало мне ошибки, когда я пытался обновить более одной записи. Что я имею в виду под этим утверждением... У меня есть локации внутри этажа здания. Они имеют тип (рабочее место, офис, кухня и т. д.). На каждом этаже ДОЛЖНО быть хотя бы одно рабочее место, поэтому я должен запретить пользователю вносить изменения, которые удалят последнее рабочее место на этаже. Если они попытаются внести большое количество изменений и попытаются отправить эти изменения, и эти изменения приведут к удалению последнего рабочего места, я должен остановить ВСЕ эти изменения.   -  person CrystalBlue    schedule 20.08.2010


Ответы (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);"

Если вы выполните пакет, все предложения будут выполняться внутри транзакции, и БД не будет обновляться в случае возникновения ошибки.

Отказ от ответственности: просто идея, не проверенная.

person Eduardo Molteni    schedule 20.08.2010