Консультация по поводу массовой вставки в sql-сервер - PullRequest
0 голосов
/ 03 октября 2018

У меня есть программа C # WinForm, которая мне нужна для вставки sql-сервера.

Файл - это текст (с разделителями табуляции).

Иногда он содержит (3 столбца):

BAR    DES     MAK
111    aaa     222
333    bbb     333
.
.

и иногда он содержит (5 столбцов):

BAR    DES     MAK    PRI    MLA
111    aaa     222    1.1    2.2
333    bbb     333    3.3    4.4
.
.

Таблица sql-сервера: CatTbl:

BAR nvarchar(250)
DES nvarchar(250)
MAK nvarchar(250)
PRI nvarchar(250)
MLA nvarchar(250)

Я пытаюсь вставить вот так:

SQL = @"BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')";
Cmd = new SqlCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();

Если там 5 столбцов, он отлично работает , но , если там 3 столбца, он падает

Я искал и не нашел решения.У кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Если таблица не соответствует файлу, создайте представление для этой таблицы и вставьте в представление

-- Run this once in SSMS to create the view
CREATE VIEW MyView AS SELECT BAR,DES,MAK FROM CatTbl;

-- If your file has three columns, use this
BULK INSERT MyView FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')

-- If your file has five columns, use this
BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')
0 голосов
/ 03 октября 2018

BULK INSERT не очень гибок.Решением было бы загрузить столбцы в таблицу только с одним столбцом varchar, а затем выполнить разбиение / анализ позже.

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