2011-05-19 4 views
0

J'utilise sql server 2005 pour un projet asp.net. Je veux exécuter un fichier SQL qui contient toutes les modifications de base de données de la dernière version pour apporter facilement une base de données à la dernière version.Script de déploiement SQL Server

J'ai fondamentalement juste un tas de table d'alter, créez la table, créez l'index, alter la vue, appelez le proc stocké, les états etc. Mais je voudrais l'emballer dans une transaction, donc si une partie de celui-ci échoue, aucun des changements ne passera. Sinon, il pourrait faire un débogage vraiment désordonné où il a fini.

De plus, si vous connaissez une meilleure façon de gérer le déploiement DB, faites-le moi savoir!

Répondre

0

je fais quelque chose de similaire avec un script Powershell using SMO.

pseudocode serait:

$SDB = SourceDBObject 
$TDB = TargetDBObject 

ForEach $table in $SDB.Tables 
{ 
    Add an entry to a hash table with the name 
    and some attributes (rowcount, columns, datasize) 
} 

# Same thing for $TDB 

# Compare the two arrays, and make a list of all the ones that exist in the source but not in the target, or that are different 

# Same thing for Procs and Views 

# Pass this list to a SMO.Scripter as an UrnCollection object, and it will script them out in dependency order (it's an option), with drops 

# Wrap the script in a transaction and execute it on target server 

# Use SQLBulkCopy class to transfer data server-to-server 
0

Quelle version de Visual Studio utilisez-vous? Dans Visual Studio 2010 et à partir de ce que je peux me rappeler Visual Studio 2008 - dans le menu sous "Données" il y a deux options - "Schema Compare" et "Data Compare". Cela devrait vous déplacer dans la bonne direction.

0
BEGIN TRANSACTION @TranName; 
USE AdventureWorks2008R2; 
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate 
    WHERE JobCandidateID = 13; 

COMMIT TRANSACTION @TranName; 

Vous devez tout exécuter dans une transaction

0

Notez que certaines déclarations doivent être DDL la première déclaration dans un lot (lots sont séparés des transactions). (GO est le séparateur de lots par défaut dans SSMS et SQLCMD).

Questions connexes