/ / Riscrivendo una query T-SQL che cancella più di 30k righe - sql-server, tsql

Riscrivere una query T-SQL che cancella più di 30k righe - sql-server, tsql

Se voglio eliminare fino a 30k righe in una tabella in TSQL, Non posso usare

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

perché il numero di ID nella clausola IN è troppo grande, secondo questo articolo http://support.microsoft.com/kb/288095

Ma come posso riscrivere la mia query per eliminare le righe utilizzando una tabella temporanea e join tabella?

EDIT: gli ID non sono in ordine. Sono scelti da una determinata logica, quindi sono solo alcuni degli ID arbitrari presenti in myTable.

risposte:

6 per risposta № 1
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

* SE È UN QUERY ALL'INTERNO DI UN'ALTRA QUERY *****</ Strong>

 DELETE MYTABLE
FROM MYTABLE t
INNER JOIN (SELECT DISTINCT ID
FROM MYTABLE
WHERE ID BETWEEN 1 AND 30000) d d.id = t.id

0 per risposta № 2

Se stai colpendo solo quel limite specifico, puoi provare qualcosa del genere:

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

Tuttavia, potresti anche raggiungere un limite diverso.

La migliore soluzione, imho è dividere le cose in più query quando si genera lo sql ed eseguire le cose in lotti separati.