关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server将视图或表的记录不重复地插入到另一个表

    SQL Server将视图或表的记录不重复地插入到另一个表

    2011-08-15 13:20:00 出处:ITJS
    分享

    SQL Server将视图或表的记录不重复地插入到另一个表中的方法与思路是本文大家要介绍的,接下来就让我们来一起了解一下这部分内容吧。

    最近在做个自动更新数据的小程序,每天有几个表的txt记录集要更新到数据库,并且txt记录集中的数据列并不全用,只使用一部分。

    在做完更新程序后,发现还少了一个功能:自动提示重要数据的功能,在编写时发现需要一个表记录是否关联表记录是否已提示,这牵涉一个问题,插入提示记录的表数据会重复导致重复提示,没有必要的短信会发送,当然可以通过以下步骤判断记录是否是重复:

    将关键字段生成唯一索引 从视图或表中读取记录插入到提示表

    这样逻辑比较简单,但是效率有点低了,要与sqlserve多次通讯,能不能在数据库端就完成这些操作呢,反正取记录、更新到表都是固定的,在网上找了一下倒是有不少,但没有完整的实现,经过一上午的努力,终于解决了问题,所以作文以记之。

    由于工作关系,不便使用原数据,生成了两个模拟的表,结构如下:

    CREATE TABLE [dbo].[t1](      [c1] [nchar](10) NOT NULL,      [c2] [nchar](20) NOT NULL  ) ON [PRIMARY]   GO  CREATE TABLE [dbo].[t2](      [Id] [int] IDENTITY(1,1) NOT NULL,      [c1] [nchar](10) NOT NULL,      [c2] [nchar](20) NOT NULL,      [IsHandled] [bit] NOT NULL  ) ON [PRIMARY]   GO   ALTER TABLE [dbo].[t2] ADD  CONSTRAINT [DF_t2_IsHandled]  DEFAULT ((0)) FOR [IsHandled]  GO  --生成数据  INSERT INTO [test].[dbo].[t1]([c1],[c2]) VALUES     ('a1','a2')  INSERT INTO [test].[dbo].[t1]([c1],[c3]) VALUES ('a1','a3')  INSERT INTO [test].[dbo].[t1]([c1],[c4]) VALUES ('a1','a4')  INSERT INTO [test].[dbo].[t1]([c1],[c5]) VALUES ('a1','a5')  INSERT INTO [test].[dbo].[t1]([c1],[c6]) VALUES ('a1','a6')  INSERT INTO [test].[dbo].[t1]([c1],[c7]) VALUES ('a1','a7')  INSERT INTO [test].[dbo].[t1]([c1],[c8]) VALUES ('a1','a8')  INSERT INTO [test].[dbo].[t1]([c1],[c9]) VALUES ('a1','a9')  INSERT INTO [test].[dbo].[t1]([c1],[c10]) VALUES    ('a1','a2')  INSERT INTO [test].[dbo].[t1]([c1],[c11]) VALUES    ('a1','a11') 

    思路:阻止重复数据插入不外两个办法,一是利用唯一索引,二是利用事务,插入后判断同样的记录是否有两条,是的话,回滚事务。具体实现如下:

    读取T1的数据, 用游标读取每一条记录,并插入T2

    方法一、利用唯一索引

    SQL Server将视图或表的记录不重复地插入到另一个表 

    方法二、利用事务,在这里建立一个存储过程方便调用

    Create procedure [dbo].[insert_t2]  @c1 varchar(10), --定义一个输入参数,就是那个是不是重复的值  @c2 varchar(20)    --把每一列弄成变量存入,不知你的表有几字段,这里我就以两个字段为例  as        declare @sum int   begin tran      insert into t2 (c1,c2) values (@c1,@c2)   select @sum=count(*) from t2 where (c1=@c1) and (c2=@c2)      if(@sum>1)      begin    raiserror('该记录已经存在',16,8)    rollback tran  --滚回事务      end      else          commit tran  --提交事务 

    下面是从T1取数据存入游标的存储过程

    Create procedure [dbo].[GetT1]        @MyCursor Cursor Varying Output        --With Encryption        As                Set @MyCursor = Cursor               For                      Select C1,C2 From T1        Open @MyCursor 

    将数据插入T2的存储过程

    Create Procedure InsertIntoT2        As         Declare @c1 varchar(20)        Declare @c2 nvarchar(20)        Declare @T1DataCursor Cursor         Exec GetT1 @T1DataCursor out              Fetch Next From @T1DataCursor        InTo @c1,@c2        While(@@Fetch_Status = 0)        Begin              exec [test].[dbo].[insert_t2] @c1,                             Fetch Next From @T1DataCursor               InTo @c1,@c2        End        Close @T1DataCursor        Deallocate @T1DataCursor        Go 

    调用方法

    DECLARE @RC int   -- TODO: 在此处设置参数值。   EXECUTE @RC = [test].[dbo].InsertIntoT2  GO 

    结果:

    SELECT TOP 1000 [Id]        ,[c1]        ,[c2]        ,[IsHandled]    FROM [test].[dbo].[t2] 

    SQL Server将视图或表的记录不重复地插入到另一个表

    可以看到t2只有9行记录。

    关于SQL Server数据库中将视图或表中的记录不重复地插入到另一个表中的方法就介绍到这里了,希望本次的介绍能够对您有所帮助。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Edge浏览器百度被劫持/篡改怎么办,地址后边跟着尾巴#tn=68018901_7_oem_dg

    Google Chrome 在 iPhone 上新增了 Safari 数据导入选项

    Windows 11专业版 KMS工具激活产品密钥的方法

    DEDECMS安全策略官方出品

    Microsoft Text Input Application 可以关闭吗?

    新版本QQ如何关闭自带的浏览器?

    C++编程语言中continue的用法和功能,附举例示范代码

    c++ map 的数据结构、基本操作以及其在实际应用中的使用。

    C语言如何避免内存泄漏、缓冲区溢出、空指针解引用等常见的安全问题

    C语言中的break语句详解

    IT头条

    马斯克2026最新采访总结:2040年,全球机器人数量将突破100亿台

    23:52

    专家解读|规范人工智能前沿业态健康发展的新探索:解读《人工智能拟人化互动服务管理暂行办法》

    00:54

    用至强 6高存力搞定MoE卸载!

    17:53

    美国将允许英伟达向中国“经批准的客户”出售H200 GPU

    02:08

    苹果与微信就15%手续费达成一致?腾讯未置可否

    22:00

    技术热点

    PHP 和 Node.js 的10项对比挑战

    Javascript闭包深入解析及实现方法

    windows 7、windows 8.1手动增加右键菜单功能技巧

    MYSQL出错代码大汇总

    windows 7假死机怎么办 windows 7系统假死机的原因以及解决方法

    Ubuntu(Linux)下配置IP地址的方法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。