2015-05-19 17 views
5

Khi cố gắng để chèn 6000 hàng vào một bảng tạm thời tôi nhận được thông báo sauTemporary Table - Tối đa số cho phép 1000 hàng đánh giá cao

Số lượng biểu thức giá trị hàng trong câu lệnh INSERT vượt số lượng tối đa cho phép của 1000 giá trị hàng.

Nguồn không được đặt trong SQL Server.

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

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

Tôi phải làm gì để tránh giới hạn này?

Trả lời

9

Các limit of 1000 là về số lượng hàng trong values khoản của insert chứ không phải là một hạn chế của bảng tạm thời bản thân:

Số lượng tối đa của hàng có thể được xây dựng bằng cách chèn hàng trực tiếp tại danh sách VALUES là 1000. Lỗi 10738 được trả về nếu số hàng vượt quá 1000 trong trường hợp đó.

Để chèn hơn 1000 dòng, sử dụng một trong các phương pháp sau:

  • Tạo nhiều câu lệnh INSERT;
  • Sử dụng bảng có nguồn gốc;
  • Nhập số lượng lớn dữ liệu bằng cách sử dụng tiện ích bcp hoặc tuyên bố BULK INSERT.

Do đó bạn có thể làm điều đó theo khối, với câu lệnh nhỏ hơn insert.

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

Nếu bạn cần tất cả 6000 là nguyên tử, bạn có thể đặt giao dịch xung quanh toàn bộ.

1

Đó chỉ là vấn đề với mệnh đề VALUES. Nếu bạn đang chèn hơn 1000 hàng bằng phương pháp này (cách tiếp cận vấn đề nhưng hey) sau đó sử dụng một bộ SELECT báo cáo với UNION ALL:

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

này cũng có lợi thế mà bạn có thể kiểm tra resultset từ SELECT báo cáo trước khi thực hiện INSERT s - bạn sẽ không nhận được sự sang trọng đó với cấu trúc VALUES.

Các vấn đề liên quan