我有一个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,这看起来不是理想的方法,是有没有其他人这样做?
答案 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
然后,最后一步是从客户端应用程序调用此存储过程。