當前位置:首頁 » 編程語言 » sqlserver批量插入數據

sqlserver批量插入數據

發布時間: 2022-07-31 09:27:38

sqlSERVER 批量導入EXCEL文件數據

SQL批量導入exe文件數據的話,直接從批量導入就好了。

② 怎樣向SQL Server中大批量插入數據

一次性插入大量數據,只能使用循環,
如:游標,while 循環語句
下面介紹While 循環插入數據,
SQL 代碼如下:
IF OBJECT_ID('dbo.Nums') IS NOT NULL
DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 5000000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
--以上函數取自Inside SQL Server 2005: T-SQL Query一書。
INSERT dbo.Sample SELECT n, RAND(CAST(NEWID() AS BINARY(16))) FROM Nums

③ 如何在SQLserver中利用循環語句插入大量的數據

  1. 這個在sqlserver裡面不好做,要用到sql語言中的變數並且sql語音沒有for不過有while,不過一般數據都不會這樣批量輸入,畢竟不是每條數據都之間都存在內在的聯系。如果你真的想用for語句進行錄入的話,你就用visual studio連接你的資料庫用c#代碼來完成這個活。

  2. DECLARE @id INT,@username NVARCHAR(50),@Pwd NVARCHAR(50)

  3. SET @id=0

  4. SET @username ='kk'

  5. SET @Pwd='12345'

  6. WHILE @i<10000 --10000為你要執行插入的次數

  7. BEGIN

  8. INSERT INTO xx ( id, username,Pwd ) --xx為表名

  9. VALUES ( @id, @username,@Pwd )

  10. SET @i=@i+1

  11. END

④ SQLSERVER資料庫中批量導入數據的幾種方法

我們通過SQL腳本來插入數據,常見如下四種方式。

方式一:一條一條插入,性能最差,不建議使用。

INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛欄1段',160);INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛欄2段',260);
......

方式二:insert bulk

語法如下:

方式四:拼接SQL

INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛欄1段',160)
,(newid(),'牛欄2段',260)
......

⑤ 提高Sqlserver大批量插入數據速度的幾點方法

這個可以藉助系統表,一次插入多條的方式,來達到減少插入的次數,來達到大批量插入數據的方法。

⑥ sql server怎麼批量導入

在SQL Server中集成了很多成批導入數據的方法。

一、使用Select Into語句

若企業資料庫都採用的是SQL Server資料庫的話,則可以利用Select Into語句來實現數據的導入。Select Into語句,作用就是把數據從另外一個資料庫中查詢出來,然後加入到某個用戶指定的表中。

在使用這條語句的時候,需要注意幾個方面的內容。

1、需要在目的資料庫中先建立相關的表。如想把進銷存系統資料庫(SQLServer)中的產品信息表(Proct)導入到ERP系統中的產品信息表(M_Proct)中。則前期是在ERP系統的資料庫中已經建立了這張產品信息表。

2、這種方法只復製表中的數據,而不復製表中的索引。如在進銷存系統數據中的產品信息表中,在產品編號、產品種類等欄位上建立了索引。則利用Select Into語句把數據復制到ERP系統的表中的時候,只是復制了數據內容的本身,而不會復制索引等信息。

3、這條語句使用具有局限性。一般情況下,這只能夠在SQL Server資料庫中採用。不過,對於SQL Server不同版本的資料庫,如2008或者2003,還都是兼容的。若需要導入的對象資料庫不是SQL Server的,則需要採用其他的方法。

4、採用這條語句的話,在目的表中必須不存在數據。否則的話,目的表中的數據會被清除。也就是說,這個語句不支持表與表數據的合並。在SQL Server中,有一條類似的語句,可以實現這個功能。這條語句就是:Insert Into。作用就是把另外一張表中的數據插入到當前表中。若用戶想要的時表與表數據的合並,則可以採用這條語句。兩者不能夠混淆使用,否則的話,很容 易導致數據的丟失。

5、以上兩條語句都支持兼容的不同類型的數據類型。如在原標中,某個欄位的數據類型是整數型,但是在目的表中這個欄位的數據類型則是浮點型,只要這個兩個數據類型本來就兼容的,則在導入的時候,資料庫是允許的。

另外再補上一個小技巧:

想復製表a的所有欄位名到一個新表b的時候,可以使用以下方法:

1)select * into b from a where 1<>1 (僅SQL Server可用)

2)select top 0 * into b from a

二、利用Excel等中間工具進行控制

1、雖然第一種方法操作起來比較簡單,但是其也有一些缺點。如只支持同一種類型的資料庫;不能夠對數據進行過多的干預等等。一般情況下,若用戶原數據准確度比較高,不需要過多的修改就可以直接拿來用的話,則就已採用第一種方式。

2、但是,若在原資料庫中,數據的准確度不是很高,又或者,有很多數據是報廢的。總之,需要對原資料庫的數據進行整理,才能夠使用的情況,不建議先導入進去,再進行更改。在遇到這種情況時,喜歡利用Excle作為中間工具。也就是說,先把數據中原資料庫中導到Excle中。有些資料庫,如 Oracle資料庫,不支持Excle格式。但是,可以導為CSV格式的文件。這種文件Excle也可以打得開。

3、然後,再在Excle中,對記錄進行修改。由於Excle是一個很強的表格處理軟體,所以,其數據修改,要比在資料庫中直接修改來得方便,來得簡 單。如可以利用按時間排序等功能,把一些長久不用的記錄清楚掉。也可以利用替換等功能,把一些不規范的字元更改掉。這些原來在資料庫中比較復雜的任務,在 Excle等工具中都可以輕松的完成。

4、等到表中的內容修改無誤後,資料庫管理員就可以把Excle表格中的文件直接導入到SQL Server資料庫中。由於SQL Server與Excel是同一個父母生的,所以,之間的兼容性很好。在Sql Server中提供了直接從Excel文件中導入數據的工具。

5、雖然這要藉助中間工具導入數據,但是,因為其處理起來方便、直觀,所以,在大部分時候都是採用這種方式。

最後,再附上如何讓Excel表格在資料庫中能查看到的相關代碼:

execsp_addlinkedserver'excel','ex','Microsoft.Jet.OLEDB.4.0','C:桌面abc.xls',null,'Excel5.0'--創建一個名為excel的連接服務,可以查看到abc.xls裡面的內容
EXECsp_addlinkedsrvlogin'excel','false','sa','Admin',NULL--創建一個映射以允許SQLServer登錄sa使用Excel登錄Admin連接到excel,並且沒有密碼
--execsp_dropserver'excel'--刪除連接
select*fromexcel...Sheet1$--查看Excel的Sheet1表裡面的內容

⑦ c#怎樣向sqlserver批量插入數據

C#和MS SQL交互使用的技術叫做 ADO.NET。 使用ADO.NET可以方便的對SQL SERVER 進行操作。

(如果你對ADO.NET不了解,建議先MSDN一下)

批量插入數據,有兩種方式,

1,數據比較復雜但是量不是很大,(這個大小的概念要視你的硬體、網路而定,一般在100萬條以上才叫大)。

使用FOR循環進行插入, 即聲明連接(conn.Open)然後進行遍歷,

一條一條插入資料庫(執行Insert語句),

一般來說,100W條數據,如果插入本機資料庫的話, 耗時一般在40S-1分鍾左右,

也可以在SqlServer中創建一個存儲過程來執行Insert命令, 遍歷時只需要調用存儲過程即可, 存儲過程的執行效率比Sql語句要高很多,因為不需要每次都編譯

100W條數據用存儲過程來執行的話,一般耗時在20S左右,。


2數據量巨大,但是類型較簡單,(一般指上百萬條數據)

使用ADO.NET提供的BulkCopy,即批量導入,

語法:

publicstaticvoidBulkToDB(DataTabledt,stringTableName)
{
SqlConnectionsqlConn=newSqlConnection(
ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString);

SqlBulkCopybulkCopy=newSqlBulkCopy(sqlConn);
bulkCopy.BulkCopyTimeout=600;
bulkCopy.DestinationTableName=TableName;
bulkCopy.BatchSize=dt.Rows.Count;

try
{
sqlConn.Open();
if(dt!=null&&dt.Rows.Count!=0)
bulkCopy.WriteToServer(dt);
}
catch(Exceptionex)
{
throwex;
}
finally
{
sqlConn.Close();
if(bulkCopy!=null)
bulkCopy.Close();
}
}

需要傳入一個DataTable,一個表名。


這種方式速度非常快,同樣100W條數據,本機導入,大概3-5秒就可以完成,

但是需要注意,傳入的DataTable必須和Sql Server中的表結構一模一樣,

比如你的表有3列,分別是Name, Age, Sex。 你傳入的DataTable也必須是如此,所以這種方式只適合導入一些基礎數據, 並不適合作為數據層的常用方法。


如果數據量巨大又要求很高的效率,更建議使用NoSql資料庫

⑧ 怎樣快速向sqlserver插入上億條數據

步驟如下:
1. 建新表(t2);
2. 將舊表t數據插入到新表t2;
3. 將舊表刪除;
4. 重建約束和索引;
其實事情已經做完了, 2億7千萬條數據存儲過程分批插入大概3小時完成, 只是探索一下:
有無更好更方便的方式來做這個事情

⑨ 如何在SQL Server中批量導入數據

方案一、循環導入

實現方式是利用資料庫訪問類調用存儲過程,利用循環逐條插入。很明顯,這種方式效率並不高

方案二、使用Bulk插入

bulk方法主要思想是通過在客戶端把數據都緩存在Table中,然後利用SqlBulkCopy一次性把Table中的數據插入到資料庫,效率非常高

方案三:

利用SQLServer2008的新特性--表值參數(Table-Valued Parameter)。表值參數是SQLServer2008才有的一個新特性,使用這個新特性,我們可以把一個表類型作為參數傳遞到函數或存儲過程里。

方案四:

對於單列欄位,可以把要插入的數據進行字元串拼接,最後再在存儲過程中拆分成數組,然後逐條插入。查了一下存儲過程中參數的字元串的最大長度,然後除以欄位的長度,算出一個值,很明顯是可以滿足要求的,只是這種方式跟第一種方式比起來,似乎沒什麼提高,因為原理都是一樣的。

方案五:

考慮非同步創建、消息隊列等等。這種方案無論從設計上還是開發上,難度都是有的。

⑩ 如何高效地批量導入數據到SqlServer

2.SqlBulkCopy是個不錯的選擇,直接由DataTable可以導入到資料庫
,但要注意(1)列名與目標表一致(2)數據類型一致(3)空值容錯處理,參考代碼:///<summary///將<see cref="DataTable"/
的數據批量插入到資料庫中。///</summary///<param name="dataTable"
要批量插入的
<see cref="DataTable"/。
</param///<param name="batchSize"
每批次寫入的數據量。
</(DataTable dataTable,
stringtableName,
intbatchSize =10000){using(SqlConnection connection =newSqlConnection(myConnectionString)){try{connection.Open();//給表名加上前後導符using(varbulk =newSqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity,
null){DestinationTableName=tableName,
BatchSize=batchSize}){//循環所有列,為bulk添加映射//dataTable.EachColumn(c = bulk.ColumnMappings.Add(c.ColumnName, c.ColumnName), c = !c.AutoIncrement);foreach(DataColumn dcindataTable.Columns){bulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);}bulk.WriteToServer(dataTable);
bulk.Close();}returntrue;}catch(Exception exp){returnfalse;}finally{connection.Close();}}}
3.如果是數據量非常大,超過10W以上的數據,可以考慮生成.dtsx文件,然後由C#代碼直接調用,效率還是不錯的。

熱點內容
少兒編程排行 發布:2025-01-24 04:40:46 瀏覽:698
搭建伺服器怎麼使用 發布:2025-01-24 04:19:34 瀏覽:444
平行進口霸道哪些配置有用 發布:2025-01-24 04:19:32 瀏覽:874
ngram演算法 發布:2025-01-24 04:03:16 瀏覽:658
迷宮游戲c語言 發布:2025-01-24 03:59:09 瀏覽:358
榮耀30pro存儲類型 發布:2025-01-24 03:54:02 瀏覽:556
客戶端文件上傳 發布:2025-01-24 03:48:44 瀏覽:257
推特更改密碼的用戶名是什麼 發布:2025-01-24 03:45:55 瀏覽:596
cc編譯選項 發布:2025-01-24 03:45:18 瀏覽:512
銀行密碼怎麼被鎖 發布:2025-01-24 03:37:02 瀏覽:431