现在可能已经问过这个问题,但我发现的答案都不令人满意。我想要做的就是在一个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]
?
谢谢你们
答案 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#执行此操作,您应该很高兴。