我现在两个版本的数据库,1.0和2.0
表有200多张表2.0增加了很多表,还包括1.0的所有表字段现在是1.0升级到2.0的时候数据整个迁移到2.0的数据库中,第次升级把数据复制上来很麻烦,如何自动生成SQL语句,执行一下让数据自动到2.0来

解决方案 »

  1.   

    这个实现起来不难,没有技术难点
    定义2个Connection ,分别连接1.0 与 2.0 的数据库没装SQL,要不写给你
      

  2.   

    我指的导入就是排除用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中都有
      

  3.   

    还有是1.0和2.0的表都在经常增加,但是1.0有的表2.0也会增加,所以需要有时时生成新的迁移SQL语句
      

  4.   

    不同数据库需要不同的connection,又怎么能实现
    这类SQL呢?
    还是用数据导入吧,不过导入前别忘了清理2.0中相同和相关的数据,以避免重复。
      

  5.   

    Option ExplicitSub 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
      

  6.   

    LZ,我一般对此的解决方案是:(以MS-SQL2000为例)
    将1.0版本的数据导出至脚本1,将2.0版本的数据导出至脚本2然后以文本的形式分别打开二个脚本,将2.0版本的数据复制到1.0里面(或者倒过来也可以)我以前做的库由于前台程序进行大批量功能更新,在更新中,新库中需要对旧库进行依赖性更新,我就用了上面的办法,仔细研究了新,旧二个库的脚本,然后直接改脚本,最后让新的脚本在分析器里执行!
      

  7.   

    做两层游标 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