Какие есть альтернативы использованию курсора в SQL Server 2008? - PullRequest
2 голосов
/ 04 августа 2010

Я создавал импорт, который использует SSIS для импорта данных во временную таблицу, затем с помощью хранимой процедуры, последовательно просматривает данные с помощью курсора для обработки данных и вставки информации в 3 разные таблицы. Вставки в первые 2 таблицы сложны, потому что, если существует запись, которая уже существует с теми же данными, запись не создается. Независимо от того, вставлена ​​запись или нет в первые 2 таблицы, возвращается идентификатор записи или соответствующей записи для использования в третьей таблице. Есть ли альтернатива использованию курсора?

Ответы [ 3 ]

4 голосов
/ 04 августа 2010

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

  1. оператор MERGE (позволяет указывать действия для разных случаев "при совпадении", "когда не сопоставлено по цели", "когда не сопоставлено по источнику") и
  2. предложение OUTPUT (позволяет захватывать недавно обновленные записи для обработки).
2 голосов
/ 04 августа 2010

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

http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

0 голосов
/ 04 августа 2010

Это звучит как идеальный кандидат для замены курсора комбинацией табличных переменных и цикла while (который, как проверяли и подтверждают несколько человек, почти всегда более производительный, чем курсор).

...