代码之家  ›  专栏  ›  技术社区  ›  Ram

正在将值从Excel更新到SQL Server

  •  -1
  • Ram  · 技术社区  · 8 年前

    我有一个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中的新“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
    

    当我试图执行update语句时,得到了以下错误。我正在使用libreoffice calc for excel.how修复它或任何其他方法 更新此。因为Excel有5000多条记录,很难手工完成。

    错误:

    无法为链接服务器(空)创建OLE DB提供程序“microsoft.jet.ole db.4.0”的实例。

    1 回复  |  直到 8 年前
        1
  •  1
  •   MT-FreeHK    8 年前

    如果您可以将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)
    

    然后,您可以用您想要的语句插入它。 先看看这是否可行。