以编程方式在具有不同模式的不同sql server数据库中的表之间复制数据

时间:2012-06-22 12:29:40

标签: c# database ado.net sql-server-2012

我正在尝试构建一个系统,该系统接收SQL Server数据库中的一些相关表的快照,向其附加日期时间元素并存储在不同的数据库中。因此,新数据库包含不同日期时间的数据快照(导致不同的模式)。

我已经在Sql Server Management Studio上使用t-sql了解它。我可以用C#编写查询并在两个数据库之间执行吗?我读到了有关ADO.NET但无法找到建立两个SQL连接然后执行传输查询的方法。

有更有效的方法吗?我正在使用Microsoft SQL Server 2012。

2 个答案:

答案 0 :(得分:0)

您应该将查询放在存储过程中。然后从Management Studio,C#或任何其他程序/接口调用它是微不足道的。一个简单的例子:

CREATE PROCEDURE dbo.foo
AS
BEGIN
  SET NOCOUNT ON;

  -- your query
END
GO

然后从C#开始(假设存储过程没有返回任何结果):

SqlConnection conn = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "dbo.foo";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

这不是一个详尽的代码示例(没有错误处理,处理等),只是为了提出一个想法。

编辑

您应该在两个SQL Server实例之间创建linked server。然后你的查询可以说:

SELECT * INTO [linkedserver].database.dbo.tablename
  FROM dbo.whatever
  -- WHERE ... ;

这比将数据拉入C#要高效得多。

答案 1 :(得分:0)

你应该开始阅读the Wikipedia page about ETL

此外,如果您希望perform ETL in pure C#,可以查看Rhino ETL等内容。