Переписать запрос T-SQL, который удаляет более 30 тыс. Строк - PullRequest
1 голос
/ 28 февраля 2011

Если я хочу удалить до 30 тысяч строк в таблице в TSQL, Я не могу использовать

delete from myTable where Id in (1,2,3,...,30k)

потому что количество идентификаторов в предложении IN слишком велико, согласно этой статье http://support.microsoft.com/kb/288095

Но как я могу переписать свой запрос, чтобы удалить строки, используя временную таблицу и объединения таблиц?

РЕДАКТИРОВАТЬ: идентификаторы не в порядке. Они выбираются по определенной логике, поэтому они являются просто произвольными идентификаторами в myTable.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2011
SELECT DISTINCT ID
INTO #tmpIDs
FROM tbl_IDTable
WHERE ID BETWEEN 1 AND 30000

DELETE MYTABLE 
FROM MYTABLE t
INNER JOIN #tmpIDs d ON d.id = t.id

DROP TABLE #tmpIDs

* ЕСЛИ ЭТО ЗАПРОС ВНУТРИ ДРУГОЙ ЗАПРОС *****

 DELETE MYTABLE 
    FROM MYTABLE t
    INNER JOIN (SELECT DISTINCT ID
                FROM MYTABLE
                WHERE ID BETWEEN 1 AND 30000) d d.id = t.id
0 голосов
/ 28 февраля 2011

Если вы достигаете только этого определенного предела, вы можете попробовать что-то вроде этого:

delete from myTable where ID = 1 or ID = 2 or ID = 3 or ID = ...

Вы можете просто достичь другого предела.

Лучшее решение, imho, это разбить вещи на несколько запросов, когда вы генерируете sql и запускаете вещи отдельными пакетами.

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