我有一个已经用SQL设计的表。我的目标是创建一个存储过程,以将数据从某个位置追加到此表中。这是一个大型数据集(超过 255 列(,因此我无法通过 VBA 将其直接加载到 MS 访问(前端(中。我相信这只给我留下了一个SQL选项
我已经扩展了互联网以寻求解决方案,但无济于事。
我在下面尝试过的基本代码,但是我被卡住了,没有运气找到这个。
INSERT INTO tablename (field 1, field 2)
SELECT * FROM 'Z:tempCash_Activity_201910091702.csv';
看看这段使用 ado 导入 csv 数据的代码,也许它可以帮助你。 在我看来,它最接近您的要求。 但我还没有在超过 255 列上尝试过
所以我想通了,想把它发布给全世界。
具有如此多的列和字段长度超过 15 个字符的问题在于,数字中的第 15 个字符在 excel 中丢失。
使用 VBA代码,我通过 VBA 将目标文件导入为文本文件,强制第一列为文本。(我建议您记录宏并单击要作为文本的列(
然后,我使用 VBA 代码以最佳方式规范化数据,删除不必要的列。
完成此操作后,我在 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 +
''''