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

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

新聞中心

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

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

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

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

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

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

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

由于工作關(guān)系,不便使用原數(shù)據(jù),生成了兩個(gè)模擬的表,結(jié)構(gòu)如下:

 
 
 
 
  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')

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

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

方法一、利用唯一索引

方法二、利用事務(wù),在這里建立一個(gè)存儲(chǔ)過(guò)程方便調(diào)用

 
 
 
 
  1. Create procedure [dbo].[insert_t2]
  2. @c1 varchar(10), --定義一個(gè)輸入?yún)?shù),就是那個(gè)是不是重復(fù)的值
  3. @c2 varchar(20)    --把每一列弄成變量存入,不知你的表有幾字段,這里我就以兩個(gè)字段為例
  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  --滾回事務(wù)
  13.     end
  14.     else
  15.         commit tran  --提交事務(wù)

下面是從T1取數(shù)據(jù)存入游標(biāo)的存儲(chǔ)過(guò)程

 
 
 
 
  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的存儲(chǔ)過(guò)程

 
 
 
 
  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è)置參數(shù)值。
  3. EXECUTE @RC = [test].[dbo].InsertIntoT2
  4. GO

結(jié)果:

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

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

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


網(wǎng)頁(yè)名稱:SQLServer將視圖或表的記錄不重復(fù)地插入到另一個(gè)表
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/coejopj.html