欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 針對Sqlserver大數據量插入速度慢或丟失數據的解決方法

針對Sqlserver大數據量插入速度慢或丟失數據的解決方法

熱門標簽:地圖標注一個圓圈怎么用 如何在地圖標注自己店鋪 400外呼系統合法 洛陽外呼系統平臺 真人語音電銷機器人 廣州人工電銷機器人費用 電銷機器人被曝光 寧波人工外呼系統有效果嗎 怎樣把地圖標注導入公司地址

我的設備上每秒將2000條數據插入數據庫,2個設備總共4000條,當在程序里面直接用insert語句插入時,兩個設備同時插入大概總共能插入約2800條左右,數據丟失約1200條左右,測試了很多方法,整理出了兩種效果比較明顯的解決辦法:

方法一:使用Sql Server函數:

1.將數據組合成字串,使用函數將數據插入內存表,后將內存表數據復制到要插入的表。

2.組合成的字符換格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|2222|3333|456,7894,7458|0|1|2014-01-01 12:15:16',每行數據中間用“;”隔開,每個字段之間用“|”隔開。

3.編寫函數:

CREATE FUNCTION [dbo].[fun_funcname](@str VARCHAR(max),@splitchar CHAR(1),@splitchar2 CHAR(1)) 
--定義返回表  
RETURNS @t TABLE(MaxValue float,Phase int,SlopeValue float,Data varchar(600),Alarm int,AlmLev int,GpsTime datetime,UpdateTime datetime) AS   
/*     
author:hejun li   
create date:2014-06-09   
*/   
BEGIN   
DECLARE @substr VARCHAR(max),@substr2 VARCHAR(max)
--申明單個接收值 
declare @MaxValue float,@Phase int,@SlopeValue float,@Data varchar(8000),@Alarm int,@AlmLev int,@GpsTime datetime 
SET @substr=@str   
DECLARE @i INT,@j INT,@ii INT,@jj INT,@ijj1 int,@ijj2 int,@m int,@mm int 
SET @j=LEN(REPLACE(@str,@splitchar,REPLICATE(@splitchar,2)))-LEN(@str)--獲取分割符個數   
IF @j=0   
  BEGIN   
   --INSERT INTO @t VALUES (@substr,1) --沒有分割符則插入整個字串  
   set @substr2=@substr;
   set @ii=0
   SET @jj=LEN(REPLACE(@substr2,@splitchar2,REPLICATE(@splitchar2,2)))-LEN(@substr2)--獲取分割符個數
     WHILE @ii=@jj
        BEGIN
          if(@ii@jj)
            begin
              SET @mm=CHARINDEX(@splitchar2,@substr2)-1 --獲取分割符的前一位置
              if(@ii=0)
                set @MaxValue=cast(LEFT(@substr2,@mm) as float)
              else if(@ii=1)
                set @Phase=cast(LEFT(@substr2,@mm) as int)
              else if(@ii=2)
                set @SlopeValue=cast(LEFT(@substr2,@mm) as float)
              else if(@ii=3)
                set @Data=cast(LEFT(@substr2,@mm) as varchar)
              else if(@ii=4)
                set @Alarm=cast(LEFT(@substr2,@mm) as int)
              else if(@ii=5)
                set @AlmLev=cast(LEFT(@substr2,@mm) as int)
              else if(@ii=6)
                INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
              SET @substr2=RIGHT(@substr2,LEN(@substr2)-(@mm+1)) --去除已獲取的分割串,得到還需要繼續分割的字符串
            end
          else
            BEGIN
              --當循環到最后一個值時將數據插入表
              INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
            END
        --END
        SET @ii=@ii+1
      END
  END   
ELSE   
BEGIN   
 SET @i=0   
 WHILE @i=@j   
 BEGIN   
  IF(@i@j)   
  BEGIN   
  SET @m=CHARINDEX(@splitchar,@substr)-1 --獲取分割符的前一位置
  --INSERT INTO @t VALUES(LEFT(@substr,@m),@i+1) 
  -----二次循環開始
  --1.線獲取要二次截取的字串
  set @substr2=(LEFT(@substr,@m));
  --2.初始化二次截取的起始位置
  set @ii=0
  --3.獲取分隔符個數
  SET @jj=LEN(REPLACE(@substr2,@splitchar2,REPLICATE(@splitchar2,2)))-LEN(@substr2)--獲取分割符個數
  WHILE @ii=@jj
    BEGIN
      if(@ii@jj)
        begin
          SET @mm=CHARINDEX(@splitchar2,@substr2)-1 --獲取分割符的前一位置
          if(@ii=0)
            set @MaxValue=cast(LEFT(@substr2,@mm) as float)
          else if(@ii=1)
            set @Phase=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=2)
            set @SlopeValue=cast(LEFT(@substr2,@mm) as float)
          else if(@ii=3)
            set @Data=cast(LEFT(@substr2,@mm) as varchar)
          else if(@ii=4)
            set @Alarm=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=5)
            set @AlmLev=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=6)
            INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
          SET @substr2=RIGHT(@substr2,LEN(@substr2)-(@mm+1)) --去除已獲取的分割串,得到還需要繼續分割的字符串
        end
      else
        BEGIN
          --當循環到最后一個值時將數據插入表
          INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
        END
    --END
    SET @ii=@ii+1
  END
  -----二次循環結束
  SET @substr=RIGHT(@substr,LEN(@substr)-(@m+1)) --去除已獲取的分割串,得到還需要繼續分割的字符串   
  END   
 ELSE   
  BEGIN
  --INSERT INTO @t VALUES(@substr,@i+1)--對最后一個被分割的串進行單獨處理 
  -----二次循環開始
  --1.線獲取要二次截取的字串
  set @substr2=@substr;
  --2.初始化二次截取的起始位置
  set @ii=0
  --3.獲取分隔符個數
  SET @jj=LEN(REPLACE(@substr2,@splitchar2,REPLICATE(@splitchar2,2)))-LEN(@substr2)--獲取分割符個數
  WHILE @ii=@jj
    BEGIN
      if(@ii@jj)
        begin
          SET @mm=CHARINDEX(@splitchar2,@substr2)-1 --獲取分割符的前一位置
          if(@ii=0)
            set @MaxValue=cast(LEFT(@substr2,@mm) as float)
          else if(@ii=1)
            set @Phase=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=2)
            set @SlopeValue=cast(LEFT(@substr2,@mm) as float)
          else if(@ii=3)
            set @Data=cast(LEFT(@substr2,@mm) as varchar)
          else if(@ii=4)
            set @Alarm=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=5)
            set @AlmLev=cast(LEFT(@substr2,@mm) as int)
          else if(@ii=6)
            INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
          SET @substr2=RIGHT(@substr2,LEN(@substr2)-(@mm+1)) --去除已獲取的分割串,得到還需要繼續分割的字符串
        end
      else
        BEGIN
          --當循環到最后一個值時將數據插入表
          INSERT INTO @t VALUES(@MaxValue,@Phase,@SlopeValue,''+@Data+'',@Alarm,@AlmLev,cast(@substr2 as datetime),GETDATE())
        END
    SET @ii=@ii+1
  END
  -----二次循環結束
  END   
 SET @i=@i+1    
 END   
END   
RETURN   
END 

4.調用函數語句:

insert into [mytable] select * from [dbo].[fun_funcname]('111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|2222|3333|456,7894,7458|0|1|2014-01-01 12:15:16',';','|');

5.結果展示:

select * from [mytable] ;

方法二:使用BULK INSERT

大數據量插入第一種操作,使用Bulk將文件數據插入數據庫

Sql代碼

創建數據庫

CREATE DATABASE [db_mgr] 
GO 

創建測試表

USE db_mgr 
CREATE TABLE dbo.T_Student( 
  F_ID [int] IDENTITY(1,1) NOT NULL, 
  F_Code varchar(10) , 
  F_Name varchar(100) , 
  F_Memo nvarchar(500) , 
  F_Memo2 ntext , 
  PRIMARY KEY (F_ID) 
) 
GO

填充測試數據

Insert Into T_Student(F_Code, F_Name, F_Memo, F_Memo2) select
'code001', 'name001', 'memo001', '備注' union all select
'code002', 'name002', 'memo002', '備注' union all select
'code003', 'name003', 'memo003', '備注' union all select
'code004', 'name004', 'memo004', '備注' union all select
'code005', 'name005', 'memo005', '備注' union all select
'code006', 'name006', 'memo006', '備注'

開啟xp_cmdshell存儲過程(開啟后有安全隱患)

EXEC sp_configure 'show advanced options', 1; 
RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1; 
EXEC sp_configure 'show advanced options', 0; 
RECONFIGURE;

使用bcp導出格式文件:

EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student format nul -f C:/student_fmt.xml -x -c -T'

使用bcp導出數據文件:

EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student out C:/student.data -f C:/student_fmt.xml -T'

將表中數據清空

truncate table db_mgr.dbo.T_Student

使用Bulk Insert語句批量導入數據文件:

BULK INSERT db_mgr.dbo.T_Student 
FROM 'C:/student.data'
WITH
( 
  FORMATFILE = 'C:/student_fmt.xml'
)

使用OPENROWSET(BULK)的例子:

T_Student表必須已存在

INSERT INTO db_mgr.dbo.T_Student(F_Code, F_Name) SELECT F_Code, F_Name 
FROM OPENROWSET(BULK N'C:/student.data', FORMATFILE=N'C:/student_fmt.xml') AS new_table_name

使用OPENROWSET(BULK)的例子:

tt表可以不存在

SELECT F_Code, F_Name INTO db_mgr.dbo.tt 
FROM OPENROWSET(BULK N'C:/student.data', FORMATFILE=N'C:/student_fmt.xml') AS new_table_name

您可能感興趣的文章:
  • c#幾種數據庫的大數據批量插入(SqlServer、Oracle、SQLite和MySql)
  • Sqlserver 高并發和大數據存儲方案

標簽:南昌 煙臺 晉中 北海 東營 咸寧 珠海 石家莊

巨人網絡通訊聲明:本文標題《針對Sqlserver大數據量插入速度慢或丟失數據的解決方法》,本文關鍵詞  針對,Sqlserver,大,數據,量,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《針對Sqlserver大數據量插入速度慢或丟失數據的解決方法》相關的同類信息!
  • 本頁收集關于針對Sqlserver大數據量插入速度慢或丟失數據的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    色哟哟在线观看视频| 欧美日韩一本到| 久久久久99精品国产片| 日本欧美韩国一区三区| 国产婷婷在线观看| 欧美性高清videossexo| 亚洲色图欧洲色图婷婷| 成人看片黄a免费看在线| 羞羞在线观看视频| 国产三级欧美三级日产三级99| 久久99精品视频| 黄色aaa视频| 欧美mv日韩mv| 精品一区二区国语对白| 少妇人妻好深好紧精品无码| 26uuu精品一区二区在线观看| 欧美aaaaaa午夜精品| 亚洲狠狠婷婷综合久久久久图片| 日韩午夜激情电影| 日韩成人午夜精品| 亚洲精品乱码久久久久久久久久久久| 日韩女优视频免费观看| 蜜乳av一区二区| 蜜桃久久精品成人无码av| 国产人妖乱国产精品人妖| 国产丶欧美丶日本不卡视频| 免费成人深夜夜行网站| 成人免费在线播放视频| www.欧美日韩国产在线| 欧美亚一区二区| 亚洲h在线观看| 黄色工厂在线观看| 久久久久久亚洲综合| 岛国av在线一区| 亚洲国产精品久| 亚洲大型综合色站| 国产三级视频网站| 日韩三区在线观看| 激情文学综合插| 精品一区在线观看视频| 亚洲制服丝袜av| 污污内射在线观看一区二区少妇| 欧美成人精品高清在线播放 | 亚洲欧美日本一区| 精品久久久久久最新网址| 国产精品资源网| 色婷婷av久久久久久久| 午夜精品久久久久久不卡8050| 九色porny自拍视频| 中文字幕精品三区| 久久精品无码一区二区三区毛片| 91精品国产麻豆国产自产在线| 精品亚洲国内自在自线福利| 午夜精品福利在线视频| 五月婷婷综合激情| 青青草自拍偷拍| 亚洲精品videosex极品| 久久一区二区电影| 日本一区二区视频在线| 国产伦理在线观看| 久久九九全国免费| 免费人成视频在线播放| 精品国产伦理网| 99久久国产综合色|国产精品| 日韩一区二区免费在线观看| 国产成人免费9x9x人网站视频| 欧美吻胸吃奶大尺度电影| 麻豆成人综合网| 91久久精品一区二区三区| 青青草国产成人99久久| 加勒比婷婷色综合久久| 日韩电影在线观看网站| www.99re7| 免费在线成人网| 色婷婷精品大在线视频| 男女视频一区二区| 日本久久一区二区三区| 国产在线一区观看| 欧美日韩国产一区| 高清不卡一二三区| 日韩精品一区二区三区蜜臀| 97精品视频在线观看自产线路二| 亚洲精品在线三区| 久久久久中文字幕亚洲精品| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲人人夜夜澡人人爽| 亚洲久草在线视频| 自拍偷拍第9页| 日韩福利视频网| 在线观看免费视频综合| 国产精一区二区三区| 日韩一区二区三免费高清| 91蜜桃网址入口| 日本一区二区三区免费乱视频 | 国产精品一二三区| 91精品国产综合久久久久久漫画| 成人av在线网站| 久久精品一区二区三区不卡| 亚洲中文字幕一区| 亚洲曰韩产成在线| 色综合久久久网| 国产精品综合网| 欧美tk—视频vk| 北京富婆泄欲对白| 亚洲精品福利视频网站| 男的操女的网站| 国产美女精品一区二区三区| 欧美不卡视频一区| 国产午夜在线一区二区三区| 亚洲影院理伦片| 91福利在线导航| 成人免费看的视频| 国产女人aaa级久久久级| 老司机福利在线观看| 美腿丝袜亚洲一区| 欧美一级黄色片| 亚洲激情 欧美| 午夜激情久久久| 欧美日韩不卡在线| xxxxwww一片| 一区二区成人在线观看| 在线亚洲人成电影网站色www| 成人美女在线观看| 欧美激情中文字幕一区二区| 久久噜噜色综合一区二区| 国产尤物一区二区| 久久精品一区二区| 久久免费手机视频| 国产福利精品一区| 国产精品人妖ts系列视频| 搜索黄色一级片| 成人动漫视频在线| 中文字幕巨乱亚洲| 午夜精品一区二区三区视频| www.久久久久久久久| 亚洲柠檬福利资源导航| 色94色欧美sute亚洲线路一久 | 91国内精品野花午夜精品| 99麻豆久久久国产精品免费优播| 综合电影一区二区三区 | 在线观看国产精品一区| 久久99精品久久久| 久久精品人人做| 欧美一级片在线视频| 99久久伊人精品| 亚洲在线成人精品| 91精品国产色综合久久| 国产吞精囗交久久久| 激情深爱一区二区| 国产精品久久久久一区二区三区共| 五月天婷婷色综合| 三大队在线观看| 日韩1区2区3区| 久久精品一区二区三区不卡| 成人免费毛片东京热| 少妇欧美激情一区二区三区| 日韩精品欧美精品| 久久综合色之久久综合| 翔田千里88av中文字幕| 91免费视频网址| 日韩制服丝袜av| 久久免费国产精品| 午夜爽爽爽男女免费观看| 91网页版在线| 日本亚洲三级在线| 中文一区二区完整视频在线观看 | 日韩影院一区二区| 成年人性生活视频| 青娱乐精品视频在线| 国产精品欧美一区喷水| 欧美亚日韩国产aⅴ精品中极品| 国产伦精品一区二区三区妓女 | 91视频在线网站| 大美女一区二区三区| 亚洲亚洲精品在线观看| 精品区一区二区| 久草综合在线视频| 日本护士做爰视频| 国产精品一区二区久久精品爱涩| 亚洲乱码中文字幕| 日韩精品在线网站| 极品久久久久久| 国产毛片毛片毛片毛片毛片毛片| 国模套图日韩精品一区二区| 亚洲另类在线视频| 欧美成人一区二区三区在线观看| 一区二区三区四区五区| 人妻丰满熟妇av无码久久洗澡| 国产成人精品亚洲日本在线桃色 | 日韩欧美一级二级三级| 成人黄色短视频| 涩视频在线观看| 国产老女人精品毛片久久| 亚洲五码中文字幕| 国产三级精品三级在线专区| 欧美日韩国产天堂| 久草手机视频在线观看| 波多野结衣影院| 成人黄色国产精品网站大全在线免费观看 | 一本大道久久a久久综合|