惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

博客园 - GDLMO

给12306的建议 在delphi中引用第三方控件时,找不到dcu的解决办法 使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列 在sqlserver中使用bcp自动导出数据的方法和注意事项 无法识别的属性“requirePermission” 让单元测试项目也能同步测试主程序的APP.CONFIG 水平太差,虽然认为Linq是个好东东,但有谁能教教我,怎么调试? Sqlserver 插入一条记录时,不重复插入的办法 dnn5.5.1的配置 动态生成ASP.NET按钮时要注意的一个问题 关于EditUrl与NavigateURL的调用问题 DNN常用的几种页面跳转(EditUrl和Globals.NavigateURL) The Auto option has been disabled as the DotNetNuke Application cannot connect to a valid SQL Server database SQLite3中TimeStamp的使用问题 博文阅读密码验证 - 博客园 在DNN中使用SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)始终无法获得返回值 在DNN中使用jQuery的插件Validate Enter Null Values for DateTime Column of SQL Server(转) Web.Config和Sql Server2005连接字符串总结(转)
sqlserver,将视图或表的记录不重复的插入到另一个表
GDLMO · 2011-08-13 · via 博客园 - GDLMO

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

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

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

这样逻辑比较简单,但是效率有点低了,要与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')

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

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

方法一、利用唯一索引

建立唯一索引 

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


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

将数据插入T2的存储过程


调用方法

结果

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

t2的查询结果

可以看到t2只有9行记录