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 № 1SELECT 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.