亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 針對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大數據量插入速度慢或丟失數據的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 香蕉视频久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 深夜做爰性大片中文| 可以在线看黄的网站| 韩国三级香港三级日本三级| 国产国产人免费视频成69堂| 日韩欧美一二三区| 精品国产一区二区三区精东影业| 精品国产亚洲人成在线| 亚洲第一页乱| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产麻豆精品高清在线播放| 国产亚洲精品aaa大片| 日韩专区一区| 国产麻豆精品hdvideoss| 国产精品12| 香蕉视频三级| 国产一区二区精品尤物| a级毛片免费全部播放| 韩国三级香港三级日本三级la| 成人a大片在线观看| 99久久精品国产片| 国产原创中文字幕| 成人免费观看的视频黄页| 午夜久久网| 色综合久久天天综合观看| 精品久久久久久中文字幕2017| 成人高清护士在线播放| 国产一级生活片| 夜夜操网| 天天做人人爱夜夜爽2020| 你懂的日韩| 国产91丝袜在线播放0| 99久久精品费精品国产一区二区| 国产极品精频在线观看| 一级片片| 一本伊大人香蕉高清在线观看| 你懂的日韩| 国产亚洲免费观看| 久久99中文字幕| 亚洲精品久久玖玖玖玖| 国产极品精频在线观看| 黄色免费网站在线| 国产一区二区精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 一级毛片视频播放| 欧美一区二区三区在线观看| 国产成人精品一区二区视频| 欧美a级片视频| 久草免费在线视频| 亚洲女人国产香蕉久久精品| 成人影视在线播放| 国产一区二区精品| 国产一区二区精品在线观看| 国产成人精品在线| 国产a免费观看| 99色吧| 国产欧美精品| 一级片片| 日韩一级精品视频在线观看| 欧美激情一区二区三区视频 | 中文字幕一区二区三区精彩视频| 午夜家庭影院| 色综合久久天天综合观看| 成人高清免费| 99久久精品国产高清一区二区 | 韩国三级香港三级日本三级| 欧美激情中文字幕一区二区| 青青久久精品| 欧美激情一区二区三区视频 | 成人影院久久久久久影院| a级精品九九九大片免费看| 九九国产| 精品久久久久久中文字幕2017| 国产激情视频在线观看| 久久国产影视免费精品| 91麻豆精品国产片在线观看| 九九久久国产精品| 国产激情一区二区三区| 九九热国产视频| 久久国产影院| 免费一级片网站| 999精品影视在线观看| 一级毛片视频在线观看| 色综合久久天天综合绕观看| 中文字幕97| 一a一级片| 色综合久久天天综合观看| a级毛片免费观看网站| 精品视频免费在线| 毛片高清| 久草免费在线视频| 久草免费在线视频| 久久国产影院| a级黄色毛片免费播放视频| 韩国三级香港三级日本三级| 亚洲女人国产香蕉久久精品| 国产视频一区二区在线播放| 国产成人精品综合在线| 欧美激情在线精品video| 国产视频一区二区在线观看| 美女免费精品高清毛片在线视| 青草国产在线| 亚洲第一视频在线播放| 高清一级做a爱过程不卡视频| 国产视频网站在线观看| 久久99这里只有精品国产| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 免费的黄色小视频| 欧美激情伊人| 国产麻豆精品免费视频| 四虎久久精品国产| 国产麻豆精品视频| 亚洲 欧美 91| 国产一区二区精品久久| 黄色短视屏| 国产一区二区精品久久91| 可以免费看毛片的网站| 成人影院一区二区三区| 久久成人性色生活片| 免费一级生活片| 九九国产| 国产国语在线播放视频| 国产原创中文字幕| 精品国产亚一区二区三区| 亚洲天堂一区二区三区四区| 国产一区二区精品| 韩国三级香港三级日本三级la| 精品视频一区二区三区免费| 国产a免费观看| 欧美1区| 99久久网站| 久久99中文字幕| 亚飞与亚基在线观看| 国产网站免费在线观看| 中文字幕一区二区三区 精品| 国产麻豆精品| 高清一级做a爱过程不卡视频| 青青久久精品| 国产不卡福利| 国产视频在线免费观看| 91麻豆国产| 精品国产一区二区三区免费| 国产不卡福利| 97视频免费在线观看| 日韩免费在线视频| 天天做日日爱| 999久久久免费精品国产牛牛| 九九精品久久| 色综合久久天天综合观看| 国产伦精品一区二区三区无广告| 精品视频在线看 | 亚洲女人国产香蕉久久精品 | 精品在线免费播放| 久久国产一久久高清| 国产不卡在线观看| 一级女性全黄久久生活片| 可以免费看毛片的网站| 日日夜夜婷婷| 天堂网中文字幕| 一级片片| 国产一区二区高清视频| 精品国产一区二区三区精东影业| 欧美激情一区二区三区视频| 99久久精品国产高清一区二区| 免费国产在线观看| 亚洲第一视频在线播放| 在线观看成人网 | 国产91精品系列在线观看| 99热精品在线| 青青青草影院| 欧美一区二区三区性| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久国产影院| 久草免费在线色站| 久久久成人网| 国产高清在线精品一区二区 | 国产美女在线一区二区三区| 99久久精品费精品国产一区二区| 日本伦理黄色大片在线观看网站| 欧美国产日韩在线| 国产国语对白一级毛片| 久久国产影视免费精品| 国产一区二区福利久久| 99热精品在线| 久久久久久久久综合影视网| 可以免费在线看黄的网站| 欧美另类videosbestsex视频 | 可以在线看黄的网站| 亚洲精品中文字幕久久久久久| 色综合久久天天综合绕观看| 青青青草影院| 日韩欧美一二三区| 九九精品在线播放| 色综合久久手机在线| 国产麻豆精品hdvideoss| 久久成人性色生活片| 精品视频在线观看视频免费视频| 天天做日日干|