sql-server - 将值从 Excel 更新到 Sql Server
问题描述
我有一个具有以下列和值的 excel(示例数据)
F_PRODUCT OLD_F_COMP_ID F_C_NUMBER NEW_F_COMP_ID
00231149 017-002-00-2 C_4457 017-002-01-X
ADRENALINE SPRAY 017-002-00-2 C_4457 017-002-01-X
我的表结构(Testupdate)
Create Table Testupdate(ID INT,F_PRODUCT NVARCHAR(50),F_C_NUMBER NVARCHAR(40),F_COMP_ID NVARCHAR(100))
样本值
F_PRODUCT F_C_NUMBER F_COMP_ID
00231149 C_4457 017-002-00-2
ADRENALINE SPRAY C_4457 017-002-00-2
我想用 Excel 中的 NEW_F_COMP_ID 更新 TestUpdate 表中的 F_COMP_ID 列。
例子
update TestUpdate set F_COMP_ID=excel.NEW_F_COMP_ID where TestUpdate.F_COMP_ID=excel.OLD_F_COMP_ID and
TestUpdate.F_C_NUMBER=excel.F_C_NUMBER
我试过下面的命令
UPDATE TestUpdate
SET TestUpdate.F_COMP_ID= ExcelTable.NEW_F_COMP_ID
FROM TestUpdate
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testdata.xls;',
'SELECT F_PRODUCT,OLD_F_COMP_ID, F_C_NUMBER,NEW_F_COMP_ID
FROM [Sheet1$]') AS ExcelTable
ON TestUpdate.F_PRODUCT = ExcelTable.F_PRODUCT
WHERE (TestUpdate.F_C_NUMBER = ExcelTable.F_C_NUMBER
AND TestUpdate.F_COMP_ID = testexcel.OLD_F_COMP_ID
)
eXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
当我尝试执行更新语句时,出现以下错误。我正在将 LibreOffice Calc 用于 excel.how 修复它或任何其他方式来更新它。因为 excel 有超过 5000 条记录,很难手动完成。
错误:
无法为链接服务器“(null)”创建 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”的实例。
解决方案
如果您可以将 excel 转换为 csv/txt,那么您可以简单地通过批量插入获取所有内容。
DECLARE @temp_log table{ //your csv/txt sturcture}
DECLARE @SQL varchar(300)
SET @SQL = 'BULK INSERT @temp_log FROM ''' + @path + @file_name + ''''
print('SQL:' + @SQL)
EXEC(@SQL)
然后,您可以使用您想要的语句插入它。首先看看这是否可行。
推荐阅读
- php - 传递给 php 函数的变量的值
- java - Android Studio 对话框不起作用
- java - Android Studio - 错误“未解决的类 MyFirebaseMessagingService”
- javascript - $.getJSON 返回 undefined 并产生 XML 解析错误
- kotlin - Kotlin 在返回后继续使用 else 子句
- scheme - 以下是理解 lisp 上绑定的好方法吗?
- javascript - ReadyState 交互式 vs DOMContentLoaded
- mysql - node-odbc 仅在 macOS 上返回列值的第一个字符
- coq - 没有公理的棘手的依赖模式匹配
- sharepoint - Sharepoint 可以存储小的音视频文件吗