【问题标题】:Is it possible to append a csv/txt file into a SQL table?是否可以将 csv/txt 文件附加到 SQL 表中?
【发布时间】:2020-02-11 06:24:51
【问题描述】:

我有一个已经用 SQL 设计的表。我的目标是创建一个存储过程以将数据从某个位置附加到此表中。这是一个大型数据集(超过 255 列),因此我无法通过 VBA 将其直接加载到 MS 访问(前端)中。我相信这只会给我留下一个 SQL 选项

我已经扩展了互联网以寻求无济于事的解决方案。

我在下面尝试了基本代码,但是我被卡住了,没有运气找到这个。

INSERT INTO tablename (field 1, field 2)
SELECT * FROM 'Z:\temp\Cash_Activity_201910091702.csv';

【问题讨论】:

  • 我已经在 SQL 中建表并导入了一次平面文件。不幸的是,它是从底层提供程序生成的标准文件。我现在转而尝试使用批量插入语句直接在 SQL 中运行它。 BULK INSERT dbname.dbo.table FROM 'location' with ( firstrow =2 fieldterminator = ',' rowterminator = '\n' tabblock ) 不幸的是仍然没有运气。即使我运行查询它说 0 行受影响,所以它必须读取数据只是执行操作。请帮忙

标签: sql ms-access flat-file


【解决方案1】:

所以我想通了,想把它发给全世界。

有这么多超过 15 个字符的列和字段的问题是数字中的第 15 个字符在 excel 中丢失了。

  1. 使用 VBA 代码,我通过 VBA 将目标文件作为文本文件导入,强制第一列为文本。 (我建议您录制宏并单击要作为文本的列)

  2. 使用 VBA 代码,然后我以最佳方式规范化数据,删除不必要的列。

  3. 完成后,我在我的 SQL 暂存表中创建了一个批量插入语句,并使用 VBA 代码调用它。文件名在 SQL 中处理不好,所以我不得不创建一个完整的字符串来上传。

1.

wb.ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;"mypath & LedgerString Destination:=Range( _
    "$A$1"))

3.

@filepath nvarchar(500) AS DECLARE  @bulkinsert NVARCHAR(2000) SET @bulkinsert = 

'BULK INSERT DBName.dbo.[table] FROM ''' 
+ @filepath + 
''' WITH ' +
'( ' +
    'FIRSTROW = 2, ' +
    'FIELDTERMINATOR = '','', '+
    'ROWTERMINATOR = ''\n''' +
    'TABLOCK--, '+
') ' +
'INSERT INTO table(FIELD NAMES) '+
'SELECT DISTINCT NAMES '+
'FROM table AS s ' +
'WHERE NOT EXISTS ( ' +
  'SELECT * '+
  'FROM table As t '+
  'WHERE t.UniqueAuditID = s.UniqueAuditID '+
') '+
'delete from table '+

'INSERT INTO NewTable(FIELD NAMES) '+ 
'SELECT FIELD NAMES ' +
'FROM stagingtable'+
'WHERE fileRef = ''' 
 + @filepath + 
 ''''

【讨论】:

    【解决方案2】:

    看看这段代码using ado to import csv data,也许对你有帮助。 在我看来,它最接近您的要求。 但我没有在超过 255 列上尝试过

    【讨论】:

    • 一个表中的字段(列)不能超过 255 个。听起来您的数据库还没有完全规范化。因此,您必须引入更多表,然后拆分 csv(最佳选择)或使用 VBA 将特定 csv 列导入特定表列。
    • 嗨 Rene 我认为您误读了 Aaron Dietz 的问题,CSV 文件中有 255 多列。并且他想将一些列数据导入到正常 ms 访问数据库中的表中。所以我指出他的解决方案是有效的。
    • 谢谢大家,但是,我正在尝试从 SQL 中的存储过程中执行此操作。我尝试了这个 BULK INSERT Helium.dbo.[BulkUploadTestFields] --FROM 'C:\\SqlFiles\\f1915audt.ext.191008.24' --FROM '\\twe-sql02\\SqlFiles\\f1915audt.ext 的不同变体.191008 - Copy.24' FROM 'C:\SqlFiles\f1915audt.ext.191008 - Copy.24' WITH ( FIRSTROW = 4, FIELDTERMINATOR = ',', ROWTERMINATOR = '\r', TABLOCK--, -- 格式= 'csv' --fieldquote = )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多