2015-05-19 17 views
5

Quando si cerca di inserire 6000 righe in una tabella temporanea ricevo il seguente messaggiotabella temporanea - massimo numero consentito di 1000 fila Valori

Il numero di espressioni valore di riga nell'istruzione INSERT supera il numero massimo consentito di 1000 valori di riga.

L'origine non si trova in SQL Server.

CREATE TABLE #TMP_ISIN (
    [Isin] nVARCHAR(250)) 

INSERT INTO #TMP_ISIN ([Isin]) 
VALUES 
ABOUT 6000 ROWS 

Come devo fare per evitare questo limite?

risposta

9

La limit of 1000 inizia il numero di righe nella clausola values del insert piuttosto che una limitazione della tabella temporanea stessa:

Il numero massimo di righe che possono essere costruiti inserendo righe direttamente in l'elenco VALORI è 1000. L'errore 10738 viene restituito se il numero di righe supera 1000 in tal caso.

inserire più di 1000 righe, utilizzare uno dei seguenti metodi:

  • Creare più istruzioni INSERT;
  • Utilizzare una tabella derivata;
  • Bulk importa i dati utilizzando l'utilità bcp o l'istruzione BULK INSERT.

Quindi si può fare a pezzi, con i più piccoli insert dichiarazioni.

insert into sometable (somecolumns) values <about 1000 rows>; 
insert into sometable (somecolumns) values <about 1000 rows>; 
: 
insert into sometable (somecolumns) values <about 1000 rows>; 

Se è necessario che tutti i 6000 siano atomici, è possibile effettuare una transazione attorno all'intera operazione.

1

È solo un problema con la clausola VALUES. Se si sta inserendo più di 1000 righe con questo metodo (metodo discutibile ma hey) quindi utilizzare una serie di dichiarazioni SELECT con UNION ALL:

INSERT #a (a,b) 
SELECT 'a', 'b' UNION ALL 
SELECT 'c', 'd' UNION ALL 
SELECT ...etc 

Questo ha anche il vantaggio che è possibile controllare il gruppo di risultati dalle dichiarazioni SELECT prima di fare il INSERT s - non avrai quel lusso con il costrutto VALUES.