数据库中表的同时更新应该是比较常见的,因为我们在开发关于数据库系统的时候大多数时候都是
很多表有关联的,所以要更新一个表时,很多时候都要同时对其它一些表做操作,在我的工作中常遇到的
是同步新增,同步删除,同步更新等,一般我们采取的是触发器,这些操作常不需要对表的结构做什么修改
,而现在遇到的问题却不是这样的,下面看问题:
问题提出:表table1有88703个记录,而且没有相同的记录,有唯一的主键,表table2有1992个记录,
其中table2的记录都来自于table1,那么分别在table1和table2中添加一个唯一能标识每个记录的id,
而且id这一列要在第一列.
问题分析:现假设table1,table2有四列分别是a,b,c,d,其中a为主键,现在要在这两个表添加一列为
id,使添加后table1和table2的关系保持不变,即table2的id也是来自table1的,由于数据较多,所以要考
虑到效率问题,这样我们可以用游标实现,关于添加一列而且要在第一列这个问题应该不难,下面看解决
方案.
解决方案:首先向表table1和table2添加一列id
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->alter table table1 add id int identity(1, 1)
alter table table2 add id int
将它设为第一列
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->sp_configure 'allow updates',1
RECONFIGURE WITH override
go
UPDATE syscolumns SET colid=colid+1
WHERE id=object_id('table1 ')
update syscolumns set colid=1
where id=object_id('table1 ') and name='id'
go
sp_configure 'allow updates',0
RECONFIGURE WITH override
table2的设置方法也一样,只要将table1换为table2就行了, 其实还要其它方法可以实现的,如用临时表
等,这里就不再说明,有兴趣不防去试一下,下面就是要实现更新table2,使table2中的id和table1中的id
同步,这里用游标实现:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor cursor for
select table1.id,table2.id,table1.a,table2.a from table2
left join table1 on table1.a = table2.a
open mycursorfetch next from mycursor
while @@fetch_status =0
begin
update table2 set table2.id = table1.id from table1
where table2.a= table1.a
fetch next from mycursor
end
close mycursor
deallocate mycursor
到现问题已经解决了,可能还有其它更好的方法,但我这样实现应该说效率是比较高的.
分享到:
相关推荐
作者在尝试了一些解决方法后,最终在Stack Overflow上找到了建议,他删除了自动生成的initial文件,并重新执行了makemigrations命令。initial文件位于每个应用的migrations目录下,它是Django迁移系统中自动生成的...
如果需要更新数据库中已存在的记录的CLOB字段,可以采用类似的方法,但使用UPDATE语句代替INSERT语句。具体步骤与插入CLOB数据相似: 1. 构建UPDATE语句,同样使用`:lgContent`作为CLOB字段的占位符。 2. 创建`...
在本文中,我们将深入探讨如何解决Oracle数据库中的乱码问题,并尝试将其理论应用扩展到其他类型的数据库系统。 首先,我们要了解数据库的字符编码。Oracle数据库支持多种字符集,如US7ASCII、WE8ISO8859P1、AL32...
在上面的代码中,我们使用了 UpdateDataBase 方法来更新数据库中的数据。这个方法接受一个 DataSet 对象和一个表名作为参数,并将数据更新回数据库。 知识点 6: 检索数据库数据 在上面的代码中,我们使用了 Select...
以下是一些常见的Oracle数据库问题及其解决方法: 1. 导入.dmp文件:Oracle数据库的备份通常是以.dmp格式存储的。要导入这些文件,首先需要创建一个表空间,如`logdatafile`,然后创建一个用户,如`log`,指定其...
在 Java 高并发环境下,写入用户信息到数据库可能会出现一些问题,例如多个用户同时写入导致数据不一致或重复写入。为了解决这些问题,需要使用一些特殊的方法来确保数据的一致性和高并发写入的性能。本文主要介绍了...
**解决方法二:附加和恢复数据库** 1. 停止SQL Server服务。 2. 备份置疑数据库的日志文件(例如:.ldf文件)。 3. 复制数据库文件(.mdf)和日志文件到新位置。 4. 在SQL Server中附加数据库,但要使用不同的数据库...
另一种是同步同步,即数据一旦在一个数据库中更改,就会立即在所有其他数据库中更新,确保数据实时一致,但可能会对系统响应时间造成影响。 在SQL Server环境下,如SQL 2000和SQL 2005,数据库同步有多种实现方式。...
在Oracle数据库中,表结构的设计是数据库管理的重要环节。一旦设计完成后,有时因需求变化,我们需要在已有的表中添加新的字段或者调整字段顺序。本文将详细介绍如何在Oracle数据库中修改表字段的顺序。 首先,让...
在Android应用开发中,随着应用的迭代更新,数据库版本也需要随之升级以添加新的表或修改已有结构。然而,数据库升级过程中如何确保用户数据不丢失是一个关键问题。Ormlite是一款轻量级的Java ORM(对象关系映射)库...
在本文的方法中,首先需要收集所有需要监控的Oracle数据库的信息,包括IP地址和实例名称。然后,在一个中心化的数据库实例(例如tsmonitor)中创建表空间监控所需的表,用于存储从各个数据库收集的数据。创建的表...
在实际应用中,需要确保代码正确处理了不同数据库之间的数据类型差异,比如MySQL的TEXT到ORACLE的CLOB,同时考虑到大字段的处理。 总结来说,处理ORACLE数据库中的大字段数据时,应关注存储模式选择、批量操作、...
### 数据库SQL 2000 质疑及无法附加解决方法 #### 一、问题背景 在数据库管理过程中,经常会遇到各种各样的问题,其中一种比较常见的情况是数据库出现“置疑”状态,这通常发生在服务器异常关机或者硬件故障之后。...
### 网站数据库连接错误解决方法 在网站开发与维护过程中,经常会遇到数据库连接失败的问题,这不仅会影响到用户体验,还会导致数据无法正常读写,严重影响业务运行。本文将详细介绍几种常见的网站数据库连接错误...
在SQL Server中,当尝试附加数据库时...总的来说,解决SQL Server附加数据库出错的问题需要细心的排查和适当的数据库管理知识,确保按照正确的顺序和方法进行操作,以最大程度地保护数据安全并恢复数据库的正常运行。
本文将详细介绍IIS元数据库访问失败的原因、常见错误信息及其解决方法。 #### 一、IIS元数据库简介 IIS元数据库是存储IIS配置信息的一个关键组件。它包含了IIS服务器的各种设置信息,如网站、应用程序池、目录安全...
同时,也会介绍如何在实际项目中应用SQL,提升解决实际问题的能力。 6. **学习建议** 学习SQL,除了理解基本语法,还要多做实践,尝试创建自己的数据库并进行各种操作。此外,理解数据库设计原则,如范式理论,有...
### 关系数据库中字符数据的保序加密方法 #### 摘要与引言 本文主要探讨了在关系数据库中,对于字符数据的一种新的保序加密方法。在介绍该方法之前,文章首先回顾了对数值型数据保持顺序加密的相关研究,并在此...
这个错误通常出现在编译或链接阶段,提示“无法更新程序数据库”。错误C2471是由于VC++的元数据(.pdb文件)更新过程中的问题,可能是由于磁盘空间不足、.pdb文件损坏或冲突导致的。下面我们将详细探讨这个问题,...
文章“MySQL网络数据库的安全问题及解决方法”深入探讨了系统、数据库和应用层面的安全隐患,并提出了相应的防护策略。 首先,数据库安全是整个系统安全的核心。MySQL的用户管理系统是确保数据库安全的关键。文章...