正在将值从 Excel 更新到 Sql 服务器
Updating value from Excel to 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
我的Table结构(测试更新)
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 table 中的 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 for excel.how 来修复它或任何其他方式
更新这个。因为excel有5000多条记录,手动很难做到。
错误:
Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
如果您可以将 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)
然后,你可以插入你想要的语句。
先看看这个能不能行。
我有一个 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
我的Table结构(测试更新)
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 table 中的 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 for excel.how 来修复它或任何其他方式 更新这个。因为excel有5000多条记录,手动很难做到。
错误:
Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
如果您可以将 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)
然后,你可以插入你想要的语句。 先看看这个能不能行。