5

Supponiamo che sto apportando una sorta di modifica non banale al mio database, che richiede il lavoro "personalizzato" per l'aggiornamento dalla versione A alla B. Ad esempio, la conversione di colonne ID utente da Tipo di dati UUID al nome utente del dominio Windows.Distribuzione di modifiche incrementali non banali con progetti di database Visual Studio

Come posso renderlo automaticamente dispiegabile? Cioè, voglio consentire agli sviluppatori di fare clic con il pulsante destro del mouse sul progetto, fare clic su "Distribuisci" ed eseguire questa logica se utilizzano un database abbastanza vecchio.

Non vedo alcun posto per tale accesso nei progetti di database - non sembra esserci alcuna disposizione per tali "script di aggiornamento". Non è davvero possibile? Per chiarire, la logica non può ovviamente essere generata automaticamente, ma voglio che venga eseguita automaticamente, se necessario.

Il primo ostacolo logico sarebbe, naturalmente, che l'utilità di distribuzione non sapesse se è necessario aggiornare una tale logica - presumo che potrei fornire la logica anche per questo (ad es. Controlla una tabella delle versioni e se l'ultima versione è < 5.0, eseguire questo aggiornamento, aggiungendo successivamente una nuova riga di versione).

È possibile? Posso avere una distribuzione completamente automatizzata con complessi script di modifica personalizzati? Senza di me dover inserire tutta la mia logica di modifica personalizzata in (presto) enormi script pre-compilazione o post-compilazione, ovviamente ...

risposta

0

Onestamente, l'opzione migliore è utilizzare il concetto di database migrazioni, che provenivano dal mondo Ruby, se non mi sbaglio. Ho usato un framework chiamato Migrator.Net nelle mie applicazioni, ma ce ne sono un sacco di quelli veramente validi (con vari livelli di attività) che fondamentalmente fanno la stessa cosa. Una rapida ricerca su Google mostra quite a few.

1

È possibile verificare la versione installata, se si registra il database come applicazione di livello dati durante la distribuzione. È possibile farlo inserendo la seguente nel profilo di pubblicazione:

<RegisterDataTierApplication>True</RegisterDataTierApplication> 

questa opzione registrare lo schema ed è il numero di versione nel database msdb durante la distribuzione. Assicurati di cambiare il numero di versione di dacpac tra le versioni! Usiamo MSBuild per creare dacpacs, codice di esempio per l'impostazione della versione dacpac:

DacVersion=$(ProjectReleaseNumber).$(ProjectBuildNumber).$(ProjectRevisionNumber) 

Dopo aver fatto questo, si può costruire versione-aware script pre-distribuzione.

-- Get installed version, e.g. 2.3.12309.0 
DECLARE @InstalledVersion NVARCHAR(64) = (
    SELECT type_version 
    FROM msdb.dbo.sysdac_instances 
    WHERE instance_name = DB_NAME() 
); 
-- Get the major part of the version number, e.g. 2 
DECLARE @InstalledVersionMajor TINYINT = CONVERT(TINYINT, SUBSTRING(@InstalledVersion, 0, PATINDEX('%.%', @InstalledVersion))); 

IF (@InstalledVersionMajor < 5) 
BEGIN; 
    PRINT 'Do some nontrivial incremental change that only needs to be applied on version before 5'; 
END; 

Controllo per il numero di versione che si sta attualmente distribuendo è un po 'più ingombrante, ma può anche essere fatto. Scopri l'eccellente blog di Jamie Thomson per questa tecnica: Editing sqlcmdvariable nodes in SSDT Publish Profile files using msbuild

Problemi correlati