如何使用来自其他来源的数据更新SQL Server表(DataTable)
我有一个从.xls表生成的DataTable
。
我想将此DataTable
存储到SQL Server数据库中的现有表中。
我使用SqlBulkCopy
来存储具有唯一PK的行。
问题是,我还有其他行与SQL Server表具有相同的PK ,但包含与 SQL Server表相比具有不同值的单元格 。
简而言之:
让我们在我的DataTable
说我有这样一行:
id(PK)| 免费精选名字大全| 数
005 | abc | 123
006 | lge | 122
对于我的SQL服务器,我有这样的想法;
id(PK)| 免费精选名字大全| 数
004 | cbs | 345
005 | lks | 122
现在您可以看到行006可以使用SqlBulkCopy
直接上传到SQL Server。 另一方面,由于SQL服务器表包含具有相同PK的行,因此无法使用它插入行005 。
现在我尝试手动提取行。 将每个单个单元格提取到ArrayList中,然后生成UPDATE Table语句。 但是这个方法似乎不可行,因为我要处理这么多行。
我正在寻找一种更好的方法来实现这一目标。
任何帮助表示赞赏。
谢谢
使用以下代码:
C#用于从DataTable读取数据并准备XML数据的侧面代码:
DataTable dt = new DataTable(); StringBuilder sb = new StringBuilder(); sb.Append(""); for (int i = 0; i < dt.Rows.Count; i++) { sb.Append("" + dt.Rows[0].ToString() + " "); sb.Append("" + dt.Rows[1].ToString() + " "); sb.Append("" + dt.Rows[2].ToString() + " "); } sb.Append(" "); ///pass XML string to DB side /// //sb.ToString(); //here u get all data from data table as xml format
数据库端存储过程(您需要更新表名):
上述就是C#学习教程:如何使用来自其他来源的数据更新SQL Server表(DataTable)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
CREATE PROCEDURE dbo.UpdateData -- Add the parameters for the stored procedure here @data XML AS BEGIN SET NOCOUNT ON; -- keep data into temp table create table #tmp_data (id nchar(2),name varchar(20), number int) DECLARE @XMLDocPointer INT EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @DATA INSERT INTO #tmp_data(id,name,number) SELECT ID,N,I FROM OPENXML(@XMLDocPointer,'/R/C',2) WITH( ID nchar(30), N VARCHAR(20), I int ) EXEC sp_xml_removedocument @XMLDocPointer begin tran -------------------INSERT not existing ones INSERT INTO TABLE (id,name,number) SELECT id,name,number FROM #tmp_data WHERE NOT EXISTS ( SELECT 1 FROM TABLE WHERE ID = #tmp_data.ID ) --- update existing ones UPDATE TABLE SET name = #tmp_data.name, number = #tmp_data.number FROM #tmp_data WHERE #tmp_data.id = TABLE.id commit tran if(@@error <> 0) rollback tran END
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/999880.html