Как часть моей (новой) методологии управления версиями базы данных, я пишу «сценарий изменения» и хочу, чтобы сценарий изменения вставлял новую строку в таблицу SchemaChangeLog, если сценарий выполнен успешно, или отменяет изменения, если любое отдельное изменение в скрипте завершается неудачей.
Возможно ли внести изменения в схему в транзакции, и только если она будет зафиксирована, выполнить INSERT?
Например (псевдо-код, я не слишком хорош в SQL):
SET XACT_ABORT ON
BEGIN TRANSACTION
PRINT 'Add Col2 to Table1'
IF NOT EXIST (SELECT * FROM sys.columns WHERE NAME='Col2' AND object_id=OBJECT_ID('Table1'))
BEGIN
ALTER TABLE [dbo].[Table1]
ADD Col2 int NULL
END
INSERT INTO SchemaChangeLog(MajorVer, MinorVer, PointVer, ScriptName, AppliedDate) VALUES(N'01', N'01', N'0000', N'update.01.01.0000.sql', GETDATE())
COMMIT TRANSACTION