使用C#在两个SQL Server数据库之间移动表

时间:2014-10-04 10:29:48

标签: c# sql sql-server asp.net-mvc sql-scripts

现在可能已经问过这个问题,但我发现的答案都不令人满意。我想要做的就是在一个SQL Server Express实例下的数据库之间移动一个表(包括数据)。

我已经尝试创建表的副本并删除旧表,但使用C#生成脚本是一个小噩梦,我一直遇到左右中心的语法问题。我尝试了以下代码来简单地生成脚本,但是我遇到了语法错误:

            string connectionString = "<myconnectionstring>";
            SqlConnection conn = new SqlConnection(connectionString);
            string script = dbscript;
            string dbscript = ScriptDatabase();
            Server server = new Server(new ServerConnection(conn));
            server.ConnectionContext.ExecuteNonQuery(script);

其中ScriptDatabase()如下:

public string ScriptDatabase()
        {
            string connectionString = "<myconnectionstring>";
            SqlConnection conn = new SqlConnection(connectionString);

            Server server = new Server(new ServerConnection(conn));
            var sb = new StringBuilder();

            var database = server.Databases["dbname"];

            var scripter = new Scripter(server);
            scripter.Options.ScriptData = true;
            scripter.Options.ScriptDrops = false;
            scripter.Options.IncludeHeaders = true;
            //And so on ....

            Microsoft.SqlServer.Management.Smo.Table t = database.Tables["tablename"];

            var smoObjects = new Urn[1];

                smoObjects[0] = t.Urn;
                if (t.IsSystemObject == false)
                {

                    foreach (var st in scripter.EnumScript(smoObjects))
                    {
                        sb.Append(st);
                    }
                }
            return sb.ToString();
        }

我遇到的另一个大问题是如何为数据库中的一个表生成脚本,以便将USE [CurrentDB]语句生成为USE [OtherDB]

谢谢你们

1 个答案:

答案 0 :(得分:1)

为什么不在SQL中执行此操作?

Set Nocount On
Select * Into destinationDb.dbo.destinationTable From sourceDB.dbo.sourceTable
drop table sourceDB.dbo.sourceTable

这会将整个源表(架构和数据)复制到目标数据库中,然后删除源。不&#34;使用&#34;所需的陈述,而且速度非常快。

这是你想要做的吗?显然,您只需使用SQL命令和ExecuteNotQuery()通过C#执行此操作,您应该很高兴。