sql存儲過程批量插入
可使用Merge Into 語句完成操作。
具體用法參考文章:http://www.cnblogs.com/biwork/p/3370335.html
⑵ oracle存儲過程怎樣批量插入新數據
需要生成的SQL
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存儲過程實現
create or replace procere proc_casekey_upstate
as
casekey char(14);
begin
for i in 1..10000000 loop
casekey := 'TMP'||lpad(i,7,0); -- TMP0000001
insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
end loop;
commit;
end;
begin
proc_casekey_upstate();
end;
測試發現生成一千萬條數據用了14分鍾左右,性能還是可以了,如果先去掉TMP_NUM_STATUS_ID的外鍵估計更快。
或者:
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from al connect by level <= 1000000;
⑶ mysql存儲過程怎樣批量插入數據
一下代碼運行通過:
delimiter$$;
createprocerelucia_proc16(countint)
begin
DECLAREname_procVARCHAR(20)CHARACTERSETutf8;
DECLAREsex_procVARCHAR(4)CHARACTERSETutf8;
DECLAREage_procINT(10);
DECLAREclass_procVARCHAR(20)CHARACTERSETutf8;
DECLAREAddr_procVARCHAR(50)CHARACTERSETutf8;
DECLAREiINT;
seti=1;
setsex_proc='女';
setage_proc=20;
setclass_proc='山治班';
setAddr_proc='北京市朝陽區';
whilei<countdo
setname_proc=CONCAT('露西亞',i);
insertintostudents(Name,Sex,age,class,Addr)values(name_proc,sex_proc,age_proc,class_proc,Addr_proc);
seti=i+1;
endwhile;
end
$$;
delimiter;
代碼功能:
傳入一個行數,控制插入多少條數據
運行效果:
⑷ MSSQL 2008 中怎樣用存儲過程把一個表裡的數據批量復制到另一個表
-----將userinfo表裡的數據到userinfoCopy表中
declare @UserId int,@UserName nvarchar(50)
DECLARE UserArray CURSOR FOR SELECT * FROM [userInfo] with(nolock)
OPEN UserArray
FETCH NEXT FROM UserArray INTO @UserId,@UserName
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO [userInfoCopy]
([Id]
,[name])
VALUES
(@UserId
,@UserName)
FETCH NEXT FROM UserArray INTO @UserId,@UserName
END
CLOSE UserArray
DEALLOCATE UserArray
希望對你有幫助。。。
⑸ 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資料庫