2011-10-12 17 views
15
INSERT INTO pantscolor_t (procode,color,pic) 
VALUES 
('74251', 'Black', '511black.jpg'), 
('74251', 'OD Green', '511odgreen.jpg'), 
('74251', 'Black', '511black.jpg'), 
('74251', 'OD Green', '511odgreen.jpg'), 
('74251', 'Black', '511black.jpg'), 
('74251', 'OD Green', '511odgreen.jpg'), 
.......... 
.......... 
.......... 

INSERT INTO pantscolor_t (procode,color,pic) 
VALUES 
('74251', 'Charcoal', '511charcoal.jpg'), 
('74251', 'Charcoal', '511charcoal.jpg'), 
('74251', 'Charcoal', '511charcoal.jpg'), 
('74251', 'Charcoal', '511charcoal.jpg'), 
............. 
............. 
............. 

INSERT INTO........................ 
INSERT INTO........................ 
INSERT INTO........................ 
INSERT INTO........................ 

Mam 100000 wierszy takich jak ten, ale moje instrukcje wstawiania są większe niż 1000 wierszy. Kiedy uruchamiam sql na SSMS, pojawia się błąd: "Liczba wyrażeń wartości wiersza w instrukcji INSERT przekracza maksymalną dopuszczalną liczbę 1000 wierszy."Jak mogę wstawić 100000 wierszy do MSSQL?

Odpowiedz

15

Utwórz plik csv (lub jakiś plik ze zdefiniowanym ogranicznikiem pola i separatorem wiersza) i użyj opcji "BULK INSERT", aby załadować plik do bazy danych. Plik może mieć 100000 wierszy; nie będzie problemu z ładowaniem ogromnego pliku za pomocą przesyłania zbiorczego.

http://msdn.microsoft.com/en-us/library/ms188365.aspx

+0

+1 Od kodu, można użyć klasy [SqlBulkCopy] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx) klasy – Andomar

+0

Mam plik sql to pochodzi z mysl z eksportem ... – mekar10

+0

Potem myślę; łatwo będzie go przekonwertować na plik csv. – Bala

8

Innym rozwiązaniem jest użycie kwerendę wybierającą ze związkami.

INSERT INTO pantscolor_t (procode,color,pic) 
SELECT '74251', 'Black', '511black.jpg' 
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg' 
UNION ALL SELECT '74251', 'Black', '511black.jpg' 
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg' 
UNION ALL SELECT '74251', 'Black', '511black.jpg' 
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg' 
--etc.... 

UNION ALL jest używany zamiast UNION w celu przyspieszenia zapytania gdy ma do czynienia z tysiącami rekordów. UNION ALL umożliwia duplikowanie wierszy, natomiast UNION zapewnia, że ​​duplikaty nie istnieją w zestawie wyników. W tym scenariuszu nie chcemy usuwać żadnych możliwych duplikatów, dlatego używamy UNION ALL.

0

stosując poniższe nie powinien mieć żadnego błędu:

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251','Black','511black.jpg') 

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'OD Green', '511odgreen.jpg') 

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'Black', '511black.jpg') 

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'OD Green', '511odgreen.jpg') 

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'Black', '511black.jpg') 

........... 

ja spróbowałem i to działało, oczywiście można użyć programu Excel do łatwego łączenia wartości.

Powiązane problemy