2011-10-12 1 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........................ 

Bunun gibi 100000 satır var, ancak insert ifadelerim 1000 satırdan büyük. SSMS'de sql çalıştırdığımda bana bir hata veriyor: "INSERT deyimindeki satır değeri ifadelerinin sayısı izin verilen maksimum 1000 satır değerinden fazla."MSSQL'e 100000 satır nasıl ekleyebilirim?

cevap

15

Csv dosyası (veya tanımlı alan sınırlayıcı ve satır sınırlayıcı içeren bir dosya) oluşturun ve dosyayı veritabanına yüklemek için "BULK INSERT" seçeneğini kullanın. Dosya 100000 satır olabilir; Toplu yükleme kullanarak büyük dosya yükleme sorunu olmayacaktır.

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

+0

+1 Koddan, [SqlBulkCopy] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx) sınıfını kullanabilirsiniz – Andomar

+0

Bir sql dosyanız var ihraç ile mysl geliyor ... – mekar10

+0

O zaman sanırım; csv dosyasına dönüştürmek kolay olacak. – Bala

8

diğer çözüm sendikalarıyla bir seçme sorgusu kullanmaktır.

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

binlerce kayıt ile uğraşırken sorgu hızlandırmak amacıyla yerine UNION kullanılır. UNION ALL, yinelenen satırlara izin verirken UNION, sonuç kümesinde kopyaların bulunmadığından emin olur. Bu senaryo için olası kopyaları kaldırmak istemiyoruz, bu nedenle UNION ALL kullanılıyor. Eğer herhangi bir hata olmamalıdır aşağıdaki uygulayarak

0

:

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') 

........... 

Ben denedim ve tabii kolayca değerlerini birleştirmek için excel kullanabilirsiniz çalıştı.