我有一个C#4.7.1程序,我使用SMO(32位)将存储过程和视图从一个数据库(1)复制到第二个数据库(2)。 SQL Server是Windows Server 2008 R2上的2008 R2 SP3。
后台:数据库1是我的测试数据库的副本,在存储过程和视图中正确设置了环境特定值。数据库2是从生产到我的测试系统的已恢复数据库。目标是在存储过程和视图以及任何预生产存储过程和视图中保留测试特定值。
该程序用于保留我的存储过程和视图,这些过程和视图是特定于测试但具有删除表数据的不良副作用。我希望熟悉SMO的人能够看到我做或不做的事情导致我的表中的数据被删除。
非常感谢您的帮助。
using Microsoft.SqlServer.Management.Smo;
using System;
class Program
{
static void Main(string[] args)
{
Server SourceServer = new Server(@"SQLSRVR\Instance2");
Server DestinationServer2 = new Server(@"SQLSRVR\Instance1");
try
{
//Using SQL Server authentication
SourceServer.ConnectionContext.LoginSecure = false;
SourceServer.ConnectionContext.Login = "UserID";
SourceServer.ConnectionContext.Password = "Password";
SourceServer.ConnectionContext.Connect();
DestinationServer1.ConnectionContext.LoginSecure = false;
DestinationServer1.ConnectionContext.Login = "UserID";
DestinationServer1.ConnectionContext.Password = "Password";
DestinationServer1.ConnectionContext.Connect();
Database dbSource1 = SourceServer.Databases["dbData"];
Database dbDestination1 = DestinationServer1.Databases["dbData"];
Transfer trsfrDB1 = new Transfer(dbSource1);
trsfrDB1.CopyAllObjects = false;
trsfrDB1.CopyAllSchemas = false;
trsfrDB1.CopyAllUserDefinedDataTypes = true;
trsfrDB1.CopyAllTables = false;
trsfrDB1.CopyData = false;
trsfrDB1.CopyAllStoredProcedures = true;
trsfrDB1.CopyAllViews = true;
trsfrDB1.DropDestinationObjectsFirst = true;
trsfrDB1.DestinationServer = DestinationServer1.Name;
trsfrDB1.DestinationDatabase = dbDestination1.Name;
Console.WriteLine("dbData start");
trsfrDB1.TransferData();
Console.WriteLine("dbData end");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Environment.Exit(1);
}
finally
{
if (SourceServer.ConnectionContext.IsOpen)
{
SourceServer.ConnectionContext.Disconnect();
}
if (DestinationServer1.ConnectionContext.IsOpen)
{
DestinationServer1.ConnectionContext.Disconnect();
}
}
}
}