欧美阿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精品国产| 国产成人精品一区二区三区网站观看| 亚洲中文字幕无码av| 欧美日本一区二区三区四区| 亚洲精品国产无天堂网2021| 94色蜜桃网一区二区三区| 加勒比婷婷色综合久久| 国产精品色呦呦| 国产sm精品调教视频网站| 99精品全国免费观看| 久久精品夜色噜噜亚洲a∨ | www中文在线| 久久久不卡网国产精品二区| 久久不见久久见免费视频7| 最新中文字幕视频| 精品乱人伦小说| 九九久久精品视频| 亚洲一级黄色录像| 亚洲国产精品二十页| 国产丶欧美丶日本不卡视频| 亚洲欧美另类日本| 国产精品久久看| 菠萝蜜视频在线观看一区| 一本大道久久a久久精品综合| 成人欧美一区二区三区在线播放| gogo大胆日本视频一区| 色系网站成人免费| 亚洲一区二区三区四区在线观看| 中文字幕在线视频播放| 日韩欧美一卡二卡| 久久成人免费日本黄色| 手机免费观看av| 国产精品久久影院| aa级大片欧美| 欧美精品乱码久久久久久按摩| 香蕉乱码成人久久天堂爱免费| 国产肉体xxxx裸体784大胆| 精品国产凹凸成av人导航| 国产毛片一区二区| 极品盗摄国产盗摄合集| 亚洲一区在线视频| 三级黄色片网站| 国产亚洲精品免费| 不卡av免费在线观看| 欧美精品丝袜中出| 久久成人免费电影| 色综合天天综合狠狠| 亚洲午夜视频在线观看| 国产精品815.cc红桃| 欧美国产一区在线| 久久久久亚洲av成人网人人软件| 日韩欧美的一区二区| 粉嫩欧美一区二区三区高清影视| 欧美伊人久久大香线蕉综合69| 日韩影视精彩在线| 国产人与禽zoz0性伦| 一区二区激情小说| 黄色aaa视频| 中文字幕一区二区三区视频| 国产国语老龄妇女a片| 久久亚洲综合色| 91亚洲男人天堂| 精品国产乱码久久久久久久 | 精品日本一线二线三线不卡| 国产精品1区2区| 欧美日韩一区二区三区四区五区| 久久电影网电视剧免费观看| 日本韩国精品在线| 捆绑紧缚一区二区三区视频 | 亚洲视频网在线直播| 中文字幕一区三区久久女搜查官| 国产嫩草影院久久久久| 欧美激情一区二区三区p站| 久久久久久久国产精品影院| ass极品水嫩小美女ass| 久久久久国产精品麻豆| 国产裸体视频网站| 日本一区二区三区在线不卡| 亚洲av人人澡人人爽人人夜夜| 亚洲国产电影在线观看| 国产精品入口麻豆| 中文字幕日韩av资源站| 国产精品无码久久久久久| 亚洲精品成人在线| jizzjizz日本少妇| 青娱乐精品在线视频| 欧洲国产伦久久久久久久| 韩国女主播一区| 777午夜精品视频在线播放| 国产精品亚洲第一区在线暖暖韩国| 欧美精品123区| 成人免费高清在线| 久久综合999| 五月天丁香社区| 中文字幕佐山爱一区二区免费| 亚洲а∨天堂久久精品2021| 午夜视频一区在线观看| 一本到不卡免费一区二区| 国产高清成人在线| 精品国产欧美一区二区| 制服丝袜第二页| 亚洲一区二区三区四区中文字幕| 色综合一个色综合亚洲| 国产高清久久久久| 久久人人爽爽爽人久久久| 熟妇高潮精品一区二区三区| 一区二区三区在线看| 国产真实乱在线更新| 国内精品国产成人国产三级粉色 | 国产精品美女高潮无套| 日本大胆欧美人术艺术动态| 欧美三级蜜桃2在线观看| 波多野结衣一区二区三区 | 久久久久久久精| 一色道久久88加勒比一| 日韩和的一区二区| 欧美精品乱码久久久久久| 日韩大尺度视频| 一区二区高清视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品99久| 久久久精品日韩欧美| 人妻少妇无码精品视频区| 日本成人中文字幕在线视频| 欧美一区二区播放| 日本一区二区在线免费观看| 午夜一区二区三区在线观看| 91精品国产综合久久久久久久| 性xxxxxxxxx| 亚洲影视在线观看| 欧美日韩一二三区| 性高潮免费视频| 亚洲国产va精品久久久不卡综合| 欧美三级一区二区| 欧洲熟妇的性久久久久久| 同产精品九九九| 欧美一区二区三区免费大片| 中文字幕一区三区久久女搜查官| 欧美aa在线视频| 精品国产亚洲在线| 国产又粗又黄又猛| 国产一区二区三区高清播放| 欧美激情一区二区在线| 卡通动漫亚洲综合| 9人人澡人人爽人人精品| 亚洲精品久久久久久国产精华液| 在线精品视频免费播放| 香蕉在线观看视频| 视频一区国产视频| 精品欧美一区二区三区精品久久 | 免费看黄色片的网站| 日韩电影一区二区三区四区| 精品日韩一区二区| 亚洲女人久久久| 99久久99久久综合| 亚洲丶国产丶欧美一区二区三区| 欧美一区二区黄| 国产性猛交xx乱| 成人久久久精品乱码一区二区三区| 最新不卡av在线| 欧美日韩高清影院| 成人性生交大免费看| 国产成人在线色| 亚洲主播在线播放| 欧美mv日韩mv国产网站| 天天爽天天爽天天爽| 91蜜桃婷婷狠狠久久综合9色| 亚洲一区二区三区四区的| 精品伦理精品一区| 中文字幕在线观看成人| 亚洲av永久无码精品| 精品一区二区三区香蕉蜜桃 | 五月婷婷欧美激情| 成年人国产精品| 日韩和欧美的一区| 中文字幕不卡在线| 欧美酷刑日本凌虐凌虐| av电影在线不卡| 97久久精品人人澡人人爽| 天堂久久一区二区三区| 国产亚洲综合在线| 欧美中文字幕久久| 中文字幕 自拍| 91蝌蚪porny九色| 美女任你摸久久| ㊣最新国产の精品bt伙计久久| 欧美一区二区视频在线观看 | 先锋影音av在线| 91麻豆文化传媒在线观看| 美女www一区二区| 最新国产の精品合集bt伙计| 日韩美女在线视频| 色综合天天狠狠| 久久久久久九九九九九| 91丝袜美腿高跟国产极品老师| 久久精品国产精品亚洲精品| 亚洲精品五月天| 久久久精品人体av艺术| 欧美精品日韩一区|