Можно ли добавить файл CSV / TXT в таблицу SQL? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть таблица, которую я уже разработал в SQL. Моя цель - создать хранимую процедуру для добавления данных из местоположения в эту таблицу. Это большой набор данных (более 255 столбцов), поэтому я не могу напрямую загрузить его в MS access (внешний интерфейс) через VBA. Я считаю, что это оставляет мне опцию SQL

Я масштабировал Интернет для решения безрезультатно.

основной код, который я пробовал ниже, однако я застрял и не смог найти его.

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

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Так что я понял это и хотел бы опубликовать это для всего мира.

Проблема с таким количеством столбцов и полей длиной более 15 символов заключается в том, что 15-й символ в цифре теряется. в превосходстве

  1. Используя код VBA, я импортировал целевой файл как текстовый файл через VBA, заставляя первый столбец быть текстовым. (Я бы порекомендовал вам записать макрос и щелкнуть по столбцам, которые вы хотите использовать в качестве текста)

  2. Используя код VBA, я затем наилучшим образом нормализовал данные, уперев ненужные столбцы.

  3. Как только это было сделано, я создал оператор Bulk Insert в моей таблице SQL Staging и вызвал его, используя код 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 + 
 ''''
0 голосов
/ 14 октября 2019

Посмотрите на этот код , используя ado для импорта данных в формате csv , возможно, он может вам помочь. На мой взгляд, это наиболее близко к тому, что вы просите. Но я не пробовал более 255 столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...