日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer將視圖或表的記錄不重復地插入到另一個表

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

創(chuàng)新互聯(lián)主要業(yè)務有網(wǎng)站營銷策劃、成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設、微信公眾號開發(fā)、微信平臺小程序開發(fā)H5場景定制、程序開發(fā)等業(yè)務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、成都全網(wǎng)營銷推廣資源和合作伙伴關系資源,并逐漸建立起規(guī)范的客戶服務和保障體系。 

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

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

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

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

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

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

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

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

方法一、利用唯一索引

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

 
 
 
 
  1. Create procedure [dbo].[insert_t2]
  2. @c1 varchar(10), --定義一個輸入?yún)?shù),就是那個是不是重復的值
  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('該記錄已經(jīng)存在',16,8)
  12.   rollback tran  --滾回事務
  13.     end
  14.     else
  15.         commit tran  --提交事務

下面是從T1取數(shù)據(jù)存入游標的存儲過程

 
 
 
 
  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

將數(shù)據(jù)插入T2的存儲過程

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

調(diào)用方法

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

結果:

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

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

關于SQL Server數(shù)據(jù)庫中將視圖或表中的記錄不重復地插入到另一個表中的方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>


分享名稱:SQLServer將視圖或表的記錄不重復地插入到另一個表
地址分享:http://m.5511xx.com/article/coejopj.html