2015-05-19 13 views
5

Gdy próbuje wstawić 6000 wierszy do tabeli temp mi się następujący komunikattabeli tymczasowej - Maksymalna dopuszczalna liczba 1000 rzędzie wartości

liczba wyrażeń wartości wiersz INSERT przekracza maksymalną dozwoloną liczbę z 1000 wartości wiersza.

Źródło nie znajduje się w SQL Server.

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

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

Jak mogę zrobić, aby uniknąć tego limitu?

Odpowiedz

9

limit of 1000 jest liczbą wierszy w klauzuli insertvalues niż ograniczenia tabeli czasowego, czyli:

Maksymalna liczba rzędów, które mogą być zbudowane przez wstawienie rzędów bezpośrednio lista VALUES to 1000. Błąd 10738 jest zwracany, jeśli liczba wierszy przekracza 1000 w tym przypadku.

Aby wstawić więcej niż 1000 wierszy, użyj jednej z następujących metod:

  • utworzyć wiele INSERT;
  • Użyj wyprowadzonej tabeli;
  • Masowe importowanie danych przy użyciu narzędzia bcp lub instrukcji BULK INSERT.

Stąd można to zrobić w kawałki, z mniejszymi insert wypowiedzi.

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

Jeśli potrzebujesz, aby wszystkie 6000 były atomowe, możesz zawrzeć transakcję wokół tego wszystkiego.

1

To tylko problem z klauzulą ​​VALUES. Jeśli wstawienie ponad 1000 wierszy tą metodą (wątpliwej podejścia, ale hej), a następnie użyć zestawu SELECT sprawozdania z UNION ALL:

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

ten ma również tę zaletę, że można sprawdzić resultset z wypowiedzi SELECT przed wykonaniem s-nie dostaniesz tego luksusu z konstruktem VALUES.

Powiązane problemy