Самый простой и надежный способ справиться с этим - вообще не использовать установщик.Скорее заверните весь ваш SQL в блок транзакции.Использование этого означает, что если по каким-либо причинам произойдет сбой (как часть SQL), то транзакция будет корректно откатываться, и все ваши изменения в БД будут отменены, и вам не придется реализовывать ничего, кроме определения блока транзакции в вашем операторе SQL.
Предполагая, что MS SQL больше информации о транзакциях можно найти здесь:
http://msdn.microsoft.com/en-us/library/ms188929.aspx
Большинство других основных реализаций SQL следуют очень похожей модели, но, очевидно, вместо этого ссылаются на свои документы.
Если вам нужно запустить «откат» компонента SQL вашей установки, если какой-либо другой компонент вашей установки завершится неудачно.Тогда, к сожалению, вы не можете использовать транзакции таким образом.Однако в этом случае вы можете просто вызвать скрипт отката, который удалит любые SP / таблицы и т. Д., Которые вы добавили.Тем не менее, в .NET вы можете быть обработчиком транзакций SQL в коде (например, C #), если он вам доступен, вы можете использовать это, чтобы обернуть все.