从Excel VBA将csv文件上载到SQL Server,而不声明列的数据类型

时间:2018-04-30 08:31:45

标签: sql-server excel-vba vba excel

我在SQL Server中有一个手动过程,我想在Excel VBA中自动化。在MS SQL Server 2014中,任务是将csv文件上载到数据库中的新表。为此,我右键单击我想要的数据库,单击“任务/数据导入”。这将打开SQL Server导入和导出向导。在那里,我选择Flat File Source作为数据源。然后,我选择我想要的csv文件。我勾选复选框,“第一个数据行中的列名称”。我单击下一步,然后在服务器上创建文件。

有没有办法从Excel VBA执行此操作?我确信我可以通过传递CREATE TABLE命令从Excel VBA在SQL中创建表,然后执行BULK INSERT命令,该命令将传递数据。但是,我宁愿避免创建表,因为它涉及指定列的数据类型;当从SQL Server调用该进程时,SQL Server会自动为您执行此操作。我还可以从Excel VBA自动执行此操作吗?

1 个答案:

答案 0 :(得分:0)

我能想到的最简单(但可能不是最好的方式):

  • 通过Excel-VBA
  • 读取CSV文件

Excel VBA - How to read csv file line by line but not the whole file

  • 使用文件内容编写CREATE TABLE查询。将列定义为[VARCHAR]

Create a SQL Table from Excel VBA

我已尝试过使用" SQL Server导入和导出向导"我用这种方式创建了一个表。

然后,在选择表并检查"脚本表为" > "创建",我注意到以下命令:

CREATE TABLE [dbo].[Textdokument](
    ["name1"] [varchar](50) NULL,
    ["name2"] [varchar](50) NULL,
    ["name3"] [varchar](50) NULL,
    ["name4"] [varchar](50) NULL,
    [Spalte 4] [varchar](50) NULL
) ON [PRIMARY]

老实说,这不是很优化,只要我有一些列,数字和varchar相当昂贵"对他们来说。