2010-11-08 29 views
1

這是我的困境,T-SQL插入數據量大的問題

8表

高達72列

包含數據類型INT,SMALLINT,十進制,SMALLDATETIME,炭

沒有可可怕的。

我創建了獨特的數據集100行,1000行10000行50000行100000行,500000行,但他們在插入語句。這是用於體積測試。

當試圖運行50K查詢時,sql server耗盡內存。

我有什麼選擇。我需要打破小問題;我可以提交每個X行嗎?我怎樣才能確定最大行是否有比插入語句更好的方法? Excel和訪問排除了數據量。

有沒有一個示例循環t-sql語句來創建不同類型的數據?

+0

這就是爲什麼[Bulk Insert](http://msdn.microsoft.com/zh-cn/library/ms188365.aspx)存在。不回答,因爲我找不到任何將DataSet操作轉換爲批量插入作業的示例。 – Will 2010-11-08 12:55:02

+1

這不是你的問題的答案,但是Redgate有一個方便的工具可以做這樣的事情:http://www.red-gate.com/products/SQL_Data_Generator/ – Paddy 2010-11-08 12:55:39

+0

你是什麼版本的SQL Server使用? – JNK 2010-11-08 13:28:38

回答

3

插入語句的部分與「GO」關鍵字。它將結束一批並開始另一批。爲了便於生成測試,通過「GO」分割每條線是正常的。

insert into XXX (1, 2, 3, ...) 
... 
insert into XXX (2, 3, 4, ...) 
GO 
insert into XXX (3, 4, 5, ...) 
... 
insert into XXX (4, 5, 6, ...) 
GO 

insert into XXX (1, 2, 3, ...) 
GO 
insert into XXX (2, 3, 4, ...) 
GO 
insert into XXX (3, 4, 5, ...) 
GO 
+0

雖然這是正確的,但您可能希望從每批500條語句開始(一批是GO前的語句集)。 – StingyJack 2010-11-08 13:15:56

+0

nope這個壞男孩再次出現 – icecurtain 2010-11-08 14:59:39

+0

無法執行腳本。 =================================== 內存不足以繼續執行程序。 (mscorlib) – icecurtain 2010-11-08 15:00:02

0

「有沒有人爲例環T-SQL語句來創建不同類型的數據?」

環路也可用。

declare @i int 
set @i = 0 
while @i<50000 
begin 
    set @i = @i+1 
    insert into XXX (@i, 1, 2, 3) 
end 
+1

這並沒有幫助,而且實踐不佳。 – StingyJack 2010-11-08 13:16:24

+0

如果提交發生在每個循環完成後(50000),那麼您運行另一個循環 - 是否解決OP問題? – Randy 2010-11-08 13:21:14

+0

什麼是「OP」? – Badiboy 2010-11-08 13:25:29

2

BULK INSERT正好適合這種場景 - 將大量數據加載到SQL服務器中。爲什麼它比普通刀片更高效,更快?因爲B-Tree是自下而上的,而不是普通的自上而下的插入和分割方法。

0

使用SSIS和DataFlowTask它有選項來指定批量大小。