sql合并语句的许多列
我目前正在开发一个C#程序,它需要一个巨大的Excel工作表(约14,300行,90列),并需要将其插入数据库(SQL Server 2014)。 用户可以通过数据库search不同的产品,并最终为客户提供报价。
插入我成功地使用SQLBulkcopy插入excel行到登台表。 问题是,我想使用一个合并语句来合并我的临时表和真实表,因为随着时间的推移,可能有多个相同文件的上传。 所有的SQL合并例子我发现看起来像这样:
MERGE INTO maintable as Target USING stagingtable as Source ON Target.columnA = Source.columnA WHEN MATCHED THEN UPDATE SET Target.Name = Source.Name WHEN NOT MATCHED THEN INSERT (columnA, Name) VALUES (Source.columnA, source.Name)
声明将工作,但问题是,我的Excel文件有90列。 有没有办法一次更新整行,或者我必须更新每一行的90列?
你必须逐一列出所有90列,没有更新整行。 转到SSMS,select表格,右键单击,脚本表格为 – > update to,这会给你一个脚本中的所有列的列表,你可以修改或复制/粘贴到你的合并脚本。
合并事务只会更新你告诉它的内容,而且一般只有一行。 它将closures合并目标(您可以声明多个)。 我会说它总是排成一行,但这是比我愿意做的更大胆的声明,因为它可能是错的。
如果行已经存在(即合并目标匹配),那么你只需要更新你想要的列(你不需要做每一个),如果他们不匹配,那么你必须做整个行的插。
这是回答你的问题,还是我错过了什么问题?
编辑:我认为SSIS包会更适合这个只是fyi 🙂
您可以使用MERGE
语句写入多个列。 它在这里使用基本相同的语法,其他DML使用:
.... UPDATE SET A = a, B = b, ... ...
类似的插入。
- Excel错误HRESULT:0x800A03EC尝试获取单元格名称的范围
- 从Excel 2010中调用Web服务
- Foreach循环从Access datable中使用Excel中的列提取文本文件
- SpreadsheetGear CopyFromDataTable单元格格式
- 未处理的exception:System.Runtime.InteropServices.COMException(0x800A03EC)
- 为C#互操作对象创build可重用的Excel样式
- VSTO(Excel):获取范围内的所有命名的范围
- SSIS通过C#将Excel数据导入到SQL Server
- 如何closures在一个循环内创build多个MemoryStream?