我将sql server 2005用于asp.net项目。我想运行一个包含上一版本中所有数据库更改的SQL文件,以便轻松地将数据库升级到最新版本。
我基本上只有一堆alter table,create table,create index,alter view,call stored proc,etc语句。但我想将它包装在一个事务中,所以如果它的任何部分失败,那么任何改变都不会通过。否则它可能会在完成后进行一些非常混乱的调试。
另外,如果您知道管理数据库部署的更好方法,请告诉我!
答案 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