我在 C# 应用程序中使用 SQL Server 管理对象库。我需要将存储过程从源服务器复制到另一台计算机上的目标服务器。我可以从源服务器检索 StoredProcedure 对象并在调试器 (transferProc) 中查看该对象。
如果我尝试将 proc (transferProc) 添加到新的服务器存储过程对象:
tdb.StoredProcedures.Add(transferProc);
当我这样做时,我收到一条错误消息:
Message "Parent property of object [dbo].[aStoredProc] does not match the collection's parent to which it is added."
如果我尝试更改父数据库并将其设置为目标数据库,则会收到不同的错误:
Message "SetParent failed for StoredProcedure 'dbo.aStoredProc'. "
InnerException {"Cannot perform the operation on this object, because the object is a member of a collection."}
如何将 db.StoredProcedure 对象复制到新服务器上的 tdb.StoredProcedure?
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Server;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer;
string srcDB = "foo";
string destDB = "bar";
string proc = "aStoredProc";
__DevSqlConnection = new SqlConnection(__DevSqlConnectionString);
__DevSqlConnection.Open();
__TestingSqlConnection = new SqlConnection(__TestingSqlConnectionString);
__TestingSqlConnection.Open();
//SMO Server object setup with SQLConnection.
Server devServer = new Server(new ServerConnection(__DevSqlConnection));
//Set Database
Database db = devServer.Databases[srcDB];
//SMO For the Receiving Server
Server testServer = new Server(new ServerConnection( __TestingSqlConnection ));
//Set Database
Database tdb = testServer.Databases[destDB];
//Set the proc we wish to Script
StoredProcedure transferProc = db.StoredProcedures[proc];
//Change the parent
transferProc.Parent = tdb;
tdb.StoredProcedures.Add(transferProc);
最佳答案
我发现,如果您以目标数据库为父级创建一个新的存储过程实例,并设置过程名称和架构,然后设置 TextBody 和 TextHeader,然后调用 create 方法,它将把存储过程从一个数据库复制到另一个。
StoredProcedure procNew = new StoredProcedure(dbProd, procDEV.Name, procDEV.Schema);
procNew.TextBody = procDEV.TextBody;
procNew.TextHeader = procDEV.TextHeader;
procNew.Create();
关于c# - 使用 SQL Server 管理对象将存储过程从一个 SQL Server 2008 复制到另一个 SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5189054/