2016-01-15 2 views
0

Я пытаюсь выполнить ниже запрос и в течение этого одного исключения ограничения ограничения генерируется и из-за того, что инструкция insert прекращается.продолжить инструкцию вставки, даже если генерируется исключение

Я хочу предположить, что из 10 записей 9 записей чистые, тогда вставка будет выполнена для команды 9.right now завершена, и никакая вставка не выполняется.

Я использую SQL Server 2012, и я не хочу отката транзакции, а команда Insert ignore отсутствует на сервере SQL, и я не хочу вставлять данные, содержащие error.i, просто хочу вставить чистые данные.

Запрос:

INSERT INTO rcmschargepostingmastertable 
      (clinicid, 
      clinicsiteid, 
      appointmentid, 
      patientid 
      ) 
SELECT clinicid, 
     clinicsiteid, 
     appointmentid, 
     patientid, 

FROM #tempautopostbulkchargepostingmastertable 
+1

Я считаю, что этот вопрос получил награду за труднейший прочесть образец кода, который вносит наименьший вклад в понимание и решение вопроса. * CONGRATS! * Теперь расскажите нам, какая была ваша ошибка ограничения, чтобы мы могли ответить на вопрос. – Hogan

+0

SSIS может это сделать (потому что он основан на конвейере), но не T-SQL (потому что он полностью транзакционный). Не прямо так или иначе ... – RBarryYoung

+0

код прост, но я думаю, что он не был надлежащим образом отформатирован. Я не хочу использовать SSIS. – anu

ответ

1

Это не представляется возможным делать то, что вы заявили в своем комментарии:

я хотите игнорировать любую ошибку sql и хотите продолжить установку для чистых записей

SQL Server не имеет никакого чистого механизма SQL для этого. Ваш единственный выбор - использовать один из предлагаемых вариантов работы (предложение SSIS, WHERE).

Один обход, о котором не упоминалось, потому что это худший результат, но по крайней мере это тот, который вы не сбили, - это заменить вашу вставку на основе с помощью курсора, который делает вставки по одной строке за раз.

Затем вы можете поместить однорядную вставку в блок TRY, и если это ошибка, курсор пропустит ее и перейдет к следующему.

+0

Это единственный ответ, который «решает» проблему.Каждый администратор баз данных тихо всхлипывает себя, когда появляется идея использования CURSOR, но я думаю, что это способ «решить проблему». Я собираюсь просто не вставлять записи, которые вызывают ошибки, но для каждого из них. – Hogan

+0

Я не хочу использовать курсор или любой другой цикл. Если я не могу найти какое-либо другое решение, я пойду с предложением where для известных ошибок. – anu

+0

Предложение WHERE - ваше лучшее решение. Как я уже сказал, невозможно сказать SQL игнорировать записи, которые могут вызвать ошибки, и просто вставить те, которые не будут. –

0

Я не хочу, чтобы вставить данные, которые содержит error.i просто вставить чистые данные.

Затем вам необходимо идентифицировать и отфильтровывать плохие данные/ограничение, нарушающие записи, перед тем как вставлять их в таблицу целей, что облегчит вашу жизнь.

........ 
    modifiedbyid 
FROM #tempautopostbulkchargepostingmastertable 
Where some_column <> 'bad data' 

Поскольку вы используете SQL Server 2012 можно использовать TRY_CONVERT идентифицировать и отфильтровать плохие данные

+0

Все ошибки не известны. Возможно, это ошибка времени выполнения, такая как нарушение ограничений, усечение данных или любая другая ошибка SQL. Я хочу игнорировать что данные и хотите продолжить исключение – anu

+0

Нарушение ограничений, связанных с нарушением, может быть отфильтровано в разделе «Где» –

+0

Нарушение ограничений - это всего лишь одна ошибка. Может быть так много других ошибок, di может не фильтровать 10 столбцов, используя предложение where. – anu

Смежные вопросы