Является SQL Server объемной транзакционной вставкой?

Если я выполняю следующий запрос в Query Analyzer SQL Server 2000:

BULK INSERT  OurTable 
FROM 'c:\OurTable.txt' 
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWS_PER_BATCH = 10000, TABLOCK)

На текстовом файле, который соответствует схеме OurTable для 40 строк, но тогда изменяет формат для последних 20 строк (позволяет, говорят, что последние 20 строк имеют меньше полей), я получаю ошибку. Однако первые 40 строк посвящают себя таблице. Есть ли что-то о способе, которым я называю Объемную Вставку, которая заставляет его не быть транзакционным, или я должен сделать что-то явное, чтобы вынудить его откатывать при отказе?

16
задан Brian 3 September 2008 в 15:01
поделиться

2 ответа

BULK INSERT действия как серия операторов индивидуума INSERT и таким образом, если задание перестало работать, оно не откатывает все зафиксированные вставки.

Это может, однако, быть помещено в рамках транзакции, таким образом, Вы могли сделать что-то вроде этого:

BEGIN TRANSACTION
BEGIN TRY
BULK INSERT  OurTable 
FROM 'c:\OurTable.txt' 
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', 
   ROWS_PER_BATCH = 10000, TABLOCK)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
21
ответ дан 30 November 2019 в 21:29
поделиться

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

0
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: