2012-02-26 73 views
0

我想要检索位于另一台服务器上的SQL Server数据库上的表 并且我想将检索到的数据存储到我自己的SQL Server数据库中。如何检索其他服务器上的数据库

我该怎么做?

非常感谢

+0

请参阅这:http://blog.sqlauthority.com/2009/07/29/sql-server-2008-copy-database-with-data-generate-t-sql-for-inserting-data-from-one-table- to-another-table/ – Marshal 2012-02-26 13:05:39

回答

0

一个最快的方法,如果你有很多的数据是一个名为bcp的工具。 它允许您导出和导入数据到文件。因此,您可以从源数据库导出,然后导入到目标。它非常快。

+0

但我怎么能在我的web项目中使用它? – 2012-02-28 06:09:18

0

如果您的目标是SQL 2008数据库,并且您使用C#连接到源并获取数据,您可以使用Table参数。 .NET中的DataTable可直接映射到SQL Server中的用户定义表类型。

下面是一个SO线程一下:

How to pass User Defined Table Type as Stored Procedured parameter in C#

在目标数据库

create type MyCustomTable as Table 
( 
    Field1 int, 
    Field2 varchar(50), 
    Field3 decimal(18,0) 
) 

定义自定义表类型的概念将是从源中读取所有数据进入数据表。然后,您将使用SqlParameter在目标服务器上执行存储过程或可能的文本查询。通过使用接受表参数的存储过程,你可以做到以下几点:

CREATE PROCEDURE dbo.BulkCopyData 
(
     @SourceData MyCustomTable readonly --readonly has to be there, Table params have to be readonly as parameters 

) AS 
BEGIN 

     INSERT INTO dbo.DestinationTable 
     (
      Field1, 
      Field2, 
      Field3 
      --more fields 
    ) 
     SELECT Field1,Field2,Field3 FROM @SourceData 


END 

而在C#中,当你去执行命令:

DataTable dt = new DataTable(); //Go get the data from your source here 


SqlConnection conn = new SqlConnection("...."); 
conn.Open(); 
SqlCommand cmd = new SqlCommand("dbo.BulkCopyData",conn) 
cmd.Parameters.Add(new SqlParameter("SourceData", SqlDbType.Structured){ TypeName = "dbo.MyCustomTable ", Value = dt}); 
cmd.Parameters[0]. 
cmd.ExecuteNonQuery(); 
0

可以使用也OPENROWSET功能的SQL和使用您的SQL代码调用/查询远程服务器。 defauld不启用此功能(您必须使用SP_CONFIGURE存储过程并启用远程查询才能使用此功能)。这里有一些例子的链接。

http://msdn.microsoft.com/en-us/library/ms190312.aspx

当你需要知道如何设置的配置只是让我知道)使用

0

连接到您的数据库SQL Server Management Studio中

转到服务器对象 - >添加一个新的链接服务器

然后您可以使用其他表作为select * from LinkedServerName.DBName.dbo.TableName

相关问题