将SQL Server数据从一个数据库导出到另一个数据库

时间:2017-06-28 07:30:02

标签: sql sql-server c#-4.0

我有一个Web应用程序的SQL服务器数据库,我的要求是从一个源数据库读取2-3个表数据并将数据插入目标数据库。我的输入将是一个名称和一个ID,基于我必须从源数据库中读取数据,我必须验证目标数据库中是否已存在类似的名称。我必须通过C#windows应用程序或Web应用程序执行此操作。

到目前为止,在我的研究中,人们建议使用SqlBulkCopy或SSIS包,我尝试使用以下代码传输一个表数据。

        using (SqlConnection connSource = new SqlConnection(csSource))
        using (SqlCommand cmd = connSource.CreateCommand())
        using (SqlBulkCopy bcp = new SqlBulkCopy(csDest))
        {
            bcp.DestinationTableName = "SomeTable";
            cmd.CommandText = "myproc";
            cmd.CommandType = CommandType.StoredProcedure;
            connSource.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                bcp.WriteToServer(reader);
            }
        }

我面临的问题是,我必须复制2个表数据,基于表1,表2的值如ID(主键)更改,我必须在SqlDataReader中更新这个,所以为了得到这个目标数据库中的新ID,我必须首先插入一个表数据,然后获取ID,然后在我的reader对象中更新此ID,然后再做另一个SqlBulkCopy,这看起来不是理想的方法,是有没有其他人这样做?

1 个答案:

答案 0 :(得分:0)

在源SQL实例上,我将创建一个引用目标/目标SQL实例的链接服务器,然后我将在源数据库中创建一个存储过程:

USE SourceDatabase
GO
CREATE PROCEDURE dbo.ExportSomething
@param1 DataType1,
@param2 DataType2, ...
AS
BEGIN

INSERT LinkedServer.DestinationDatabase.dbo.TargetTable
SELECT ...
FROM dbo.Table1 INNER JOIN dbo.Table2 ....
WHERE Col1 = @param1 AND/OR ...

END
GO

然后,最后一步是从客户端应用程序调用此存储过程。