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, ... ... 

类似的插入。