Производительность Tracnsact SQL Fetch - PullRequest
1 голос
/ 16 мая 2011

Привет, я хочу создать хранимую процедуру, которая объединит 2 таблицы и проверит некоторые значения для обновления.Мы будем использовать FETCH для обновления каждой записи.

Но мы рассматриваем производительность.Это плохая идея использовать FETCH?

Пример:

Table1 BookID BookName

Table2 RatingID BookName BookID

Мы объединим эти две таблицы, как это.

SELECT * FROM Table2
LEFT JOIN Table1 ON Table2.BookName = Table1.BookName 
WHERE Table2.BookID = 0

Для каждой записи, которую извлекает этот запрос, мы сделаем ОБНОВЛЕНИЕ, чтобы установить bookID Таблицы в столбец BookID Таблицы 2.

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

(как обычно), что сказал Мартин.

Кроме того, согласно вашему описанию, обновление будет выглядеть примерно так (для SQL Server):

UPDATE Table1
 set BookID = t2.BookID
 from Table1 t1
  inner join Table2 t2
   on t2.BookName = t1.BookName
 where T2.BookID = 0
  • Внутренние соединения, потому что предложение where; при Table2.BookID = 0 строки Table2, не соответствующие соединению, но все равно включенные в external объединение, будут отброшены, поскольку их BookID всегда будет равен NULL
  • Аналогично, установка BookId для Table1 в BookId для Table2 всегда устанавливает его в 0, потому что в предложении where указано «где Table2.BookId = 0». Вы можете переосмыслить это ...?
2 голосов
/ 16 мая 2011

Да.

Вы почти всегда должны стремиться избегать курсоров в SQL Server и использовать вместо этого альтернативы на основе множеств.

Оператор UPDATE поддерживает JOIN s для других таблиц.

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