高手求数据库数据整体迁移代码

lvw8000 2009-03-04 06:47:04
我现在两个版本的数据库,1.0和2.0
表有200多张表

2.0增加了很多表,还包括1.0的所有表字段

现在是1.0升级到2.0的时候数据整个迁移到2.0的数据库中,第次升级把数据复制上来很麻烦,如何自动生成SQL语句,执行一下让数据自动到2.0来
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvw9000 2009-03-09
  • 打赏
  • 举报
回复
做两层游标

declare mycursors cursor
for select Name from sysobjects where xtype in('U') order by Name
open mycursors
fetch next from mycursors into @TableName
while @@fetch_Status=0
Begin


set @TempColumns=''
declare CursorsColumns cursor
for select Name from syscolumns where id=object_id(@TableName)
open CursorsColumns
fetch next from CursorsColumns into @TableColumn
while @@fetch_Status=0
Begin
if exists(select 1 From 2.0.dbo.SysColumns Where Name=@TableColumn And ID in(Select ID From 2.0.dbo.Sysobjects Where Name=@TableName))
Begin
set @TempColumns=@TempColumns+@TableColumn+','
End
fetch next from CursorsColumns into @TableColumn
End
close CursorsColumns
deallocate CursorsColumns

fetch next from mycursors into @TableName
End
close mycursors
deallocate mycursors
lyserver 2009-03-05
  • 打赏
  • 举报
回复
不同数据库需要不同的connection,又怎么能实现
[Quote=引用 3 楼 lvw8000 的回复:]
insert into 表1(字段1,字段2..) Select 字段1,字段2..from 1.0的表1
insert into 表2(字段1,字段2..) Select 字段1,字段2..from 1.0的表2
[/Quote]
这类SQL呢?
还是用数据导入吧,不过导入前别忘了清理2.0中相同和相关的数据,以避免重复。
lvw8000 2009-03-05
  • 打赏
  • 举报
回复
还有是1.0和2.0的表都在经常增加,但是1.0有的表2.0也会增加,所以需要有时时生成新的迁移SQL语句
lvw8000 2009-03-05
  • 打赏
  • 举报
回复
我指的导入就是排除用DTS导入方式

希望是有能够自动生成导入语句的代码
如生成下面SQL
insert into 表1(字段1,字段2..) Select 字段1,字段2..from 1.0的表1
insert into 表2(字段1,字段2..) Select 字段1,字段2..from 1.0的表2
.......


1.0中有多少表就生成多少行这种代码,1.0的表中有多少字段就生成多少字段

1.0的表、字段在2.0中都有
Tiger_Zhao 2009-03-05
  • 打赏
  • 举报
回复
数据库一般有导入功能,在2.0数据库中操作就可以了。
m60a1 2009-03-05
  • 打赏
  • 举报
回复
LZ,我一般对此的解决方案是:(以MS-SQL2000为例)


将1.0版本的数据导出至脚本1,将2.0版本的数据导出至脚本2

然后以文本的形式分别打开二个脚本,将2.0版本的数据复制到1.0里面(或者倒过来也可以)

我以前做的库由于前台程序进行大批量功能更新,在更新中,新库中需要对旧库进行依赖性更新,

我就用了上面的办法,仔细研究了新,旧二个库的脚本,然后直接改脚本,最后让新的脚本在分析器里执行!
饮水需思源 2009-03-05
  • 打赏
  • 举报
回复
用DTS也可以实现的
zhou_senjian 2009-03-05
  • 打赏
  • 举报
回复
回帖是一种美德!每天回帖即可获得 10 分可用分!
Tiger_Zhao 2009-03-05
  • 打赏
  • 举报
回复
Option Explicit

Sub Main()
Dim cn As ADODB.Connection
Dim rsTable As ADODB.Recordset
Dim rsColumns As ADODB.Recordset
Dim fld As ADODB.Field
Dim sList As String

Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
"Data Source=(local);Initial Catalog=db1;" & _
"User ID=sa;password=;"
Set rsTable = cn.Execute("sp_tables @table_type = ""'TABLE'""")
While Not rsTable.EOF
sList = vbNullString

Set rsColumns = cn.Execute("sp_columns @table_name = '" & rsTable!TABLE_NAME & "'")
While Not rsColumns.EOF
sList = sList & "," & rsColumns!COLUMN_NAME
rsColumns.MoveNext
Wend

sList = Mid$(sList, 2)

Debug.Print "INSERT INTO db2.dbo." & rsTable!TABLE_NAME;
Debug.Print "(" & sList & ")";
Debug.Print " SELECT " & sList;
Debug.Print " FROM db1.dbo." & rsTable!TABLE_NAME

rsTable.MoveNext
Wend
End Sub
DengXingJie 2009-03-04
  • 打赏
  • 举报
回复
这个实现起来不难,没有技术难点
定义2个Connection ,分别连接1.0 与 2.0 的数据库

没装SQL,要不写给你

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧