VSTS for DB Pro: Aggiunta e successivo Refactor di un campo
Tutte le volte si che porta in produzione una modifica di schema viene utilizzato dietro le quinte lo Schema Compare, strumento che appunto esegue una comparazione fra gli oggetti del progetto rispetto al database indicato.
Se, durante lo sviluppo, si aggiunge un campo ad una tabella e si esegue successivamente un Refactor (operazione che capita spesso quando si progettano aggiunte ad un db esistente: "aggiungo intanto il placeholder e poi decido i nomi") non si incorre nel problema di DROP table che affligge il Refactor dei campi. Questo perchè appunto lo Schema Compare vede solo le differenze fra progetto e target DB. Il risultato quindi è una ALTER TABLE per l'aggiunta del campo.
In questo caso ho aggiunto il campo DescrizioneAggiuntiva per poi eseguire un Refactor su DescrizioneAggiuntivaEx. Al termine ho creato lo script di update.
/*
This script was created by Visual Studio on 02/02/2007 at 12.53.
Run this script on peppe.SalamiManagement.dbo to make it the same as IntroVSTSDBPRO02.
Please back up your target database before running this script.
*/
GO
SET
NUMERIC_ROUNDABORT
OFF
GO
SET
ANSI_PADDING
ON
GO
SET
ANSI_WARNINGS
ON
GO
SET
CONCAT_NULL_YIELDS_NULL
ON
GO
SET ARITHABORT ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET
ANSI_NULLS
ON
GO
IF EXISTS
(
SELECT *
FROM tempdb..sysobjects
WHERE id=
OBJECT_ID(
'tempdb..#tmpErrors'))
DROP TABLE #tmpErrors
GO
CREATE TABLE
#tmpErrors (Error
int)
GO
SET
XACT_ABORT
ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
GO
PRINT
N
'Altering [dbo].[tabSalami]'
GO
ALTER TABLE
[dbo].[tabSalami]
ADD
[SalameDescrizioneAggiuntivaEx] [dbo].[udtDescrizione] NULL
GO
IF
@@ERROR<>0
AND @@TRANCOUNT>0
ROLLBACK TRANSACTION
GO
IF
@@TRANCOUNT=0
BEGIN INSERT INTO #tmpErrors (Error)
SELECT 1
BEGIN TRANSACTION END
GO
IF EXISTS
(
SELECT *
FROM #tmpErrors)
ROLLBACK TRANSACTION
GO
IF
@@TRANCOUNT>0
BEGIN
PRINT
'The database update succeeded'
COMMIT TRANSACTION
END
ELSE PRINT
'The database update failed'
GO
DROP TABLE
#tmpErrors
GO