成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server將視圖或表的記錄不重復地插入到另一個表

數據庫 SQL Server
本文我們主要介紹了SQL Server數據庫中將視圖或表中的記錄不重復的插入到另一個表的方法與思路,希望能夠對您有所幫助。

SQL Server視圖或表的記錄不重復地插入到另一個表中的方法與思路是本文我們要介紹的,接下來就讓我們來一起了解一下這部分內容吧。

最近在做個自動更新數據的小程序,每天有幾個表的txt記錄集要更新到數據庫,并且txt記錄集中的數據列并不全用,只使用一部分。

在做完更新程序后,發現還少了一個功能:自動提示重要數據的功能,在編寫時發現需要一個表記錄是否關聯表記錄是否已提示,這牽涉一個問題,插入提示記錄的表數據會重復導致重復提示,沒有必要的短信會發送,當然可以通過以下步驟判斷記錄是否是重復:

  1. 將關鍵字段生成唯一索引
  2. 從視圖或表中讀取記錄插入到提示表

這樣邏輯比較簡單,但是效率有點低了,要與sqlserve多次通訊,能不能在數據庫端就完成這些操作呢,反正取記錄、更新到表都是固定的,在網上找了一下倒是有不少,但沒有完整的實現,經過一上午的努力,終于解決了問題,所以作文以記之。

由于工作關系,不便使用原數據,生成了兩個模擬的表,結構如下:

  1. CREATE TABLE [dbo].[t1](  
  2.     [c1] [nchar](10) NOT NULL,  
  3.     [c2] [nchar](20) NOT NULL  
  4. ) ON [PRIMARY]  
  5.  
  6. GO  
  7. CREATE TABLE [dbo].[t2](  
  8.     [Id] [int] IDENTITY(1,1) NOT NULL,  
  9.     [c1] [nchar](10) NOT NULL,  
  10.     [c2] [nchar](20) NOT NULL,  
  11.     [IsHandled] [bit] NOT NULL  
  12. ) ON [PRIMARY]  
  13.  
  14. GO  
  15.  
  16. ALTER TABLE [dbo].[t2] ADD  CONSTRAINT [DF_t2_IsHandled]  DEFAULT ((0)) FOR [IsHandled]  
  17. GO  
  18. --生成數據  
  19. INSERT INTO [test].[dbo].[t1]([c1],[c2]) VALUES     ('a1','a2')  
  20. INSERT INTO [test].[dbo].[t1]([c1],[c3]) VALUES ('a1','a3')  
  21. INSERT INTO [test].[dbo].[t1]([c1],[c4]) VALUES ('a1','a4')  
  22. INSERT INTO [test].[dbo].[t1]([c1],[c5]) VALUES ('a1','a5')  
  23. INSERT INTO [test].[dbo].[t1]([c1],[c6]) VALUES ('a1','a6')  
  24. INSERT INTO [test].[dbo].[t1]([c1],[c7]) VALUES ('a1','a7')  
  25. INSERT INTO [test].[dbo].[t1]([c1],[c8]) VALUES ('a1','a8')  
  26. INSERT INTO [test].[dbo].[t1]([c1],[c9]) VALUES ('a1','a9')  
  27. INSERT INTO [test].[dbo].[t1]([c1],[c10]) VALUES    ('a1','a2')  
  28. INSERT INTO [test].[dbo].[t1]([c1],[c11]) VALUES    ('a1','a11') 

思路:阻止重復數據插入不外兩個辦法,一是利用唯一索引,二是利用事務,插入后判斷同樣的記錄是否有兩條,是的話,回滾事務。具體實現如下:

  1. 讀取T1的數據,
  2. 用游標讀取每一條記錄,并插入T2

方法一、利用唯一索引

SQL Server將視圖或表的記錄不重復地插入到另一個表 

方法二、利用事務,在這里建立一個存儲過程方便調用

  1. Create procedure [dbo].[insert_t2]  
  2. @c1 varchar(10), --定義一個輸入參數,就是那個是不是重復的值  
  3. @c2 varchar(20)    --把每一列弄成變量存入,不知你的表有幾字段,這里我就以兩個字段為例  
  4. as    
  5.     declare @sum int  
  6.  begin tran  
  7.     insert into t2 (c1,c2) values (@c1,@c2)  
  8.  select @sum=count(*) from t2 where (c1=@c1) and (c2=@c2)  
  9.     if(@sum>1)  
  10.     begin  
  11.   raiserror('該記錄已經存在',16,8)  
  12.   rollback tran  --滾回事務  
  13.     end  
  14.     else  
  15.         commit tran  --提交事務 

下面是從T1取數據存入游標的存儲過程

  1. Create procedure [dbo].[GetT1]  
  2.       @MyCursor Cursor Varying Output  
  3.       --With Encryption  
  4.       As   
  5.              Set @MyCursor = Cursor  
  6.              For  
  7.                     Select C1,C2 From T1  
  8.       Open @MyCursor 

將數據插入T2的存儲過程

  1. Create Procedure InsertIntoT2  
  2.       As  
  3.  
  4.       Declare @c1 varchar(20)  
  5.       Declare @c2 nvarchar(20)  
  6.       Declare @T1DataCursor Cursor   
  7.       Exec GetT1 @T1DataCursor out        
  8.       Fetch Next From @T1DataCursor  
  9.       InTo @c1,@c2  
  10.       While(@@Fetch_Status = 0)  
  11.       Begin  
  12.             exec [test].[dbo].[insert_t2] @c1,  
  13.               
  14.              Fetch Next From @T1DataCursor  
  15.              InTo @c1,@c2  
  16.       End  
  17.       Close @T1DataCursor  
  18.       Deallocate @T1DataCursor  
  19.       Go 

調用方法

  1. DECLARE @RC int  
  2.  
  3. -- TODO: 在此處設置參數值。  
  4.  
  5. EXECUTE @RC = [test].[dbo].InsertIntoT2  
  6. GO 

結果:

  1. SELECT TOP 1000 [Id]  
  2.       ,[c1]  
  3.       ,[c2]  
  4.       ,[IsHandled]  
  5.   FROM [test].[dbo].[t2] 

SQL Server將視圖或表的記錄不重復地插入到另一個表

可以看到t2只有9行記錄。

關于SQL Server數據庫中將視圖或表中的記錄不重復地插入到另一個表中的方法就介紹到這里了,希望本次的介紹能夠對您有所幫助。

【編輯推薦】

  1. SQL Server鏈接服務器訪問DB2設置步驟圖解
  2. 初學SQL Server存儲過程的一些簡單操作示例
  3. T-SQL查詢中基于列的邏輯表達式的查詢詳解
  4. SQL Server實踐性練習之創建庫表及條件查詢
  5. SQL Server中CROSS APPLY和OUTER APPLY的應用詳解
責任編輯:趙鵬 來源: 博客園
相關推薦

2010-05-17 17:54:39

MySQL 數據庫

2018-02-25 17:30:18

2016-12-26 15:23:21

戴爾

2017-05-26 18:06:47

2011-05-19 14:40:33

SQL Server

2009-04-16 15:26:32

Sql Server記錄總數聚簇索引

2011-03-28 14:02:07

MirahJava對手

2010-09-17 15:08:13

SQL記錄

2012-01-12 10:09:55

Elementary 思路

2010-07-01 14:11:40

SQL Server內

2010-11-11 10:53:22

SQL Server遍

2009-04-20 15:54:04

SQL Server重復行

2010-12-21 09:47:45

SQL Server

2010-06-28 12:46:09

SQL Server

2011-11-10 09:46:41

云計算云管理

2010-11-11 11:00:06

sql server遍

2011-04-06 16:25:47

SQL Server

2018-12-05 09:00:46

DevOps持續交付持續集成

2010-07-22 16:02:29

2021-06-16 12:03:49

WindowsLinux游戲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品美女久久久久久久久久 | 亚洲精品在线视频 | 亚洲国产一区在线 | 日韩高清成人 | 97国产精品 | 国产日韩欧美激情 | 在线激情视频 | wwwxxx国产 | 日韩av最新网址 | 久久夜视频 | 国产精品18hdxxxⅹ在线 | 久久久久亚洲精品 | 毛片av免费在线观看 | 在线观看亚洲 | 亚洲乱码一区二区三区在线观看 | 精品一区二区三区四区五区 | 欧美日韩在线一区二区 | 亚洲精品欧美 | 国产精品久久久久久网站 | 国产成人一区二区三区 | 四虎影院新地址 | 国产三级一区二区 | 国产成人小视频 | 欧美成人h版在线观看 | 国产成人短视频在线观看 | 午夜视频在线免费观看 | 中文字幕 在线观看 | 超碰国产在线 | 这里有精品 | 日韩欧美国产一区二区 | 91亚洲国产| 日韩免费三级 | 日韩小视频在线 | 福利一区二区在线 | 国产福利在线 | 亚洲视频二区 | 亚洲综合二区 | 中文一级片| 久久久蜜臀国产一区二区 | 成人午夜网站 | 自拍偷拍中文字幕 |