如何在服务器上的选择数据来自ServerS上插入数据?

时间:2010-07-29 07:40:02

标签: c# database

情景:

我有一个开发SERVERA,我需要从ServerB TableA插入来自tableA的数据。

SERVERA.TableA:serialnumber = empty,partnumber=empty

例如:

数据库连接string1。

Select serialnumber,partnumber from ServerB.TableA where (serialnumber='1')

然后

数据库连接string2

Insert into serialnumber,partnumber from SERVERA.TableA 

结果:

SERVERA.TableA:serialnumber = 1,partnumber=2

1 个答案:

答案 0 :(得分:0)

如果您正在使用Sql Server,您可以使用Linked Servers提供所需的工具,然后您就可以在ServerB上执行以下代码:

INSERT INTO [dbo].[TableA]
(
 SerialNumber,
 PartNumber
)
SELECT SerialNumber,
       PartNumber
FROM [ServerA].[DatabaseNameOnServerA].[dbo].[TableA]
WHERE SerialNumber = '1'

如果您不能使用链接服务器,或者想要/需要在代码中执行它,那么这也很简单:

using (var connection = new SqlConnection(connectionStringForServerA)
{
  connection.Open();
  var query = "SELECT SerialNumber, PartNumber FROM [dbo].[TableA] WHERE SerialNumber = '1'";
  using (var adapter = new SqlDataAdapter(query, connection);
  {
    var data = new DataTable();
    adapter.Fill(data);

    using (var connectionB = new SqlConnection(connectionStringForServerB)
    {
       var query = "INSERT INTO [dbo].[TableA] (SerialNumber, PartNumber) VALUES (@Serial, @Part)";
       foreach(DataRow recordFromServerA in data.Rows)
       {
         using(var command = new SqlCommand(query, connectionB)
         {
           command.Parameters.AddWithValue("@Serial", recordFromServerA["SerialNumber"]);
           command.Parameters.AddWithValue("@Part", recordFromServerA["PartNumber"]);

           command.ExecuteNonQuery();
         }
       }
    }
  }
}

有更有效的方法来执行插入,但让代码完全拼出它正在做的事情,就像我在那里做的那样应该让你很清楚它是如何工作的(值得注意的是我没有实际上运行我给出的代码示例,因此可能需要一些调整,它也是特定于Sql Server的。)