SQL Server部署脚本

时间:2011-05-19 17:46:55

标签: asp.net sql-server sql-server-2005

我将sql server 2005用于asp.net项目。我想运行一个包含上一版本中所有数据库更改的SQL文件,以便轻松地将数据库升级到最新版本。

我基本上只有一堆alter table,create table,create index,alter view,call stored proc,etc语句。但我想将它包装在一个事务中,所以如果它的任何部分失败,那么任何改变都不会通过。否则它可能会在完成后进行一些非常混乱的调试。

另外,如果您知道管理数据库部署的更好方法,请告诉我!

4 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Visual Studio?在Visual Studio 2010中,我记得Visual Studio 2008 - 在“Data”下的菜单中有两个选项 - “Schema Compare”和“Data Compare”。这应该会让你朝着正确的方向前进。

答案 1 :(得分:0)

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

COMMIT TRANSACTION @TranName;

您应该在交易中执行所有内容

答案 2 :(得分:0)

请注意,某些DDL语句必须是批处理中的第一个语句(批处理与事务分开)。 (GO是SSMS和SQLCMD中的默认批处理分隔符。)

答案 3 :(得分:0)

我使用Powershell脚本using SMO.

执行类似的操作

伪代码将是:

$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