使用select into将所选信息从excel导入到SQL

时间:2017-05-02 14:12:44

标签: sql sql-server excel

我正在尝试从特定文件导入特定信息并放在工作簿中。

让:

" Bluelake.xlsm"将是文件名(工作簿) "时间"将是工作表 这些信息在表格中" C3"到" C8"。

sql表的参数是:

TableName:processStatus
列:processStatus,其值为:varchar(32)/ any string

我的问题:

  1. 如果提供特定的Excel坐标
  2. ,代码应如何显示
  3. 如何合并变量定义varchar(32)
  4. 我知道"插入":

    的书卷示例

    INSERT INTO table_name(column1,column2,column3,...)VALUES(value1,value2,value3,...);

    ,不幸的是我不知道如何扩展它。

    提前谢谢你。

1 个答案:

答案 0 :(得分:0)

INSERT INTO processStatus (processStatus1, processStatus2, processStatus3
            ,processStatus4, processStatus5, processStatus6)
SELECT (C3, C4, C5, C6, C7, C8)
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                'Excel 12.0;HDR=YES;Database=Bluelake.xlsx',
                'select * from [Time$]');

注意:如果您在Excel工作表中确实有命名列,则需要在此处替换它们。

并且您没有提供processStatus表的列名,因此我将其替换为您还需要在代码中替换的通用名称。

您的“数据库”必须是Excel文件的完全限定文件路径。

最后,如果您确实需要更改数据类型,则需要对每列进行CAST。例如:

CAST(C3 AS VARCHAR(32))

希望这有帮助!

编辑:另外一件事,您可能需要为XLSX使用不同的OLEDB驱动程序。如果它是一个简单的电子表格,可能更容易从Excel中保存为旧格式(XLS)。或者您可以更进一步,使用SQL导入向导将Excel数据放入表中,然后您的INSERT INTO语句更加简化,因为您只需从表中选择而不是使用OPENROWSET来查询Excel文件。