c# - 使用 SQL Server 管理对象将存储过程从一个 SQL Server 2008 复制到另一个 SQL Server 2008

标签 c# sql-server-2008 stored-procedures smo

我在 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/

相关文章:

c# - Assert.Fail 不会使测试失败?

c# - 将 ASP.NET MVC 和反向代理与 URL Rewrite v2 相结合

mysql - SQL 插入数据类型数字插入溢出错误

sql-server-2005 - SQL Server 中具有动态列的数据透视表

stored-procedures - 如何发出coldfusion存储过程调用而不等待结果

sql-server - 存储过程 OUT 参数始终返回 NULL

c# - 浏览字典 <string, int> c#

sql - SSIS 中的 OnTaskFailed 事件处理程序

php - 如何获取从存储过程返回的多个结果 - Codeigniter

c# - 尝试从 ListBox 键值对读取 "Value"时出现无效的转换错误