批量導入,我的理解是我們平時都是一條記錄一條記錄地插入,而批量導入就是超過一條記錄一次性插入。比如有一個表A,一個表B,你想把表A中性別為男的記錄導入表B,當然表A選出後的表結構和表B的表結構相同。假設A(ID,name,sex,age)表B(ID,name,age)批量導入的procere為:(Oracle)
create or replace PROCEDURE a2b
IS
BEGIN
SELECT A.ID,A.name,A.age
BULK COLLECT INTO B
FROM A
WHERE A.sex='male'
order by A.age
END
② SQL語句 批量修改 插入 刪除(純SQL語句不要(視圖和存儲過程))
存儲過程最後也是sql語句,在每個語句的結尾處,以;結尾,就可以實現多條語句的批量修改,插入,刪除,比如: insert into Login(1,2)values('1','2');update User set 1='1' where ?=?;delete from Login where 1='1'; 都可以的,試一下,你寫成存儲過程也同樣的,加上事物會嚴謹一些,應該沒那個必要吧
③ 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
希望對你有幫助。。。
④ sql批量插入數據的存儲過程問題,下面存儲過程只能插入一條,就是主鍵不自增,麻煩看看是什麼問題
你確定你的這個存儲過程是插入數據嗎?沒看到一條插入的sql啊!同時你的的表中如悄納果MaxNum如果是主鍵的森運晌話是不能這樣此鋒做更新的
⑤ 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;
代碼功能:
傳入一個行數,控制插入多少條數據
運行效果:
⑥ sql server資料庫存儲過程實現批量數據插入時跳過錯誤信息繼續插入
不可能實現,批量插入時只要有一條數據不合要求,就會導致全部插入失敗。
思路是:批量插入前,應嚴格檢查數據是否符合表結構要求、索引要求等等。
其實SQL要求批量插入時數據必須完全正確,這是對你的數據負責。
⑦ sqlserver 存儲過程大批量數據插入
可使用Merge Into 語句完成操作。
具體用法參考文章:http://www.cnblogs.com/biwork/p/3370335.html
⑧ 怎麼寫存儲過程,向資料庫中批量插入數據
用循環語句生成欄位值insert
SQL 如下:
createprocereInsertTest
as
begin
declare@iint
declare@svarchar(20)
set@i=1
while@i<=100
begin
select@s=cast(@iASvarchar(20))
insertintotest(A,B,C,D)VALUES('a'+@s,'b'+@s,'ccccc','ddddd')
SET@i=@i+1
end
end
⑨ 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資料庫
⑩ 存儲過程批量插入數據問題
create proc pc_Text
@number_star int,
@number_end int
as
declare @int int
set @int=@number_end-@number_star+1
while(@int>0)
begin
select @int= count(1) from Text where aNumber1=@number_star
if(@int=1) --如果存在變化就不插入
begin
set @number_star=@number_star+1
set @int=@number_end-@number_star+1
end
else
begin
insert into Text value(@number_star ,...)
set @number_star=@number_star+1
set @int=@number_end-@number_star+1
end
end