sqlbulkcopy,我想覆盖数据库中的当前行

MyH*_*rts 4 sql vb.net sql-server-2005

在我的程序中,我填充数据表,然后将其批量复制到我的数据库中.

但是,如果行中的3列匹配,我希望它覆盖数据库中的一行.

例如,如果我有5列

membernum dateregistered name address city state

因此,如果membernum,dateregistered和name匹配,我想覆盖该行.使用批量插入的数据.在我的程序中,没有填充整个数据库表,我认为它可以加载它.

Using bcp As SqlBulkCopy = New SqlBulkCopy(SqlDataSource2.ConnectionString)

    bcp.DestinationTableName = "dbo.dashboardtasks"

    bcp.WriteToServer(table)
Run Code Online (Sandbox Code Playgroud)

如果最好的方法是使用我的数据库表创建数据表,我将如何比较行,然后覆盖特定3列中匹配的表.然后仅使用已更改的行或新行来更新数据库

INSERT INTO [dashboardtasks] ([tour], [taskname], [deptdate], [tasktype], [desc], [duedate], [compdate], [comments], [agent], [compby], [graceperiod], [id])
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 6

在Mitch指出批量复制功能(SqlBulkCopy,bcpBULK INSERT)只处理插入,而不是更新.

解决问题的常用方法是在两个(或更多)步骤中执行批量加载 - 首先使用批量插入将数据加载到临时表中,然后使用查询在主表中插入/更新记录基于登台表中的数据,例如:

INSERT INTO MyTable
(Column1, Column2, [etc...])
SELECT Column1, Column2, [etc...] 
FROM Test_Staging
WHERE [Some condition]
Run Code Online (Sandbox Code Playgroud)

请参阅SQL SERVER - 将数据从一个表插入到另一个表中,以获取有关如何从另一个表插入一个表的信息 - 也可以在UPDATE中进行连接,但我很难在此找到一个好的资源.