通过DROP/CREATE修改数据库图示有许多问题:
- it may loose data
- it looses permissions and extended properties added to the objects dropped
- cross object dependencies (eg. foreign keys) require a certain order of drop/create
通常最好是将物体从化学版本到化学版本。 这就要求你知道目前使用的是哪一种图形版本,但这个问题很容易被搁置(使用数据库扩展的财产,见)。 FCCC/SBI/2008/8。
回答你的问题,一种冷静的做法,就是把整个文字放在大的BEGIN TRAN/COMMIT中,但很少奏效:
- it creates a potentially large transaction that requires much log space.
- the result is impossible to validate until after the commit when is too late to do anything about it
- the behavior mingling exceptions and transactions is messy at best.
XACT_ABORT ON
helps somehow, but only so much.
- Not all DLL statements can be run from inside a transaction
对于这些参考书,我将重新采用一种更为简单、更安全的办法:在修改数据表之前,支持数据库。 如果任何事情都错了,则抄送本。 另一种做法是,可将数据库的缩略作为备份。 见。 如何:将数据库转至Snapshot数据库。
请注意,BEGIN TRAN/COMMIT可以跨过批次(例如,可通过多个<代码>GO分离),因此你的关切不是一个问题。