以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于_Identify数据迁移问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=104999)

--  作者:luodang2050
--  发布时间:2017/8/9 22:07:00
--  关于_Identify数据迁移问题
表A跟表B结构完全一致,怎么将表A的数据完全迁移到表B,关键是"_Identify"不能改变,因其做了关联。
--  作者:有点甜
--  发布时间:2017/8/9 22:44:00
--  

那只能写代码插入了。试试

 

DataTables("表b").datarows.Clear
For Each dr As DataRow In DataTables("表A").datarows
    Dim sql As String = "insert into {表B} ([_Identify], 第一列,第二列) values(\'" &  dr("_Identify") & "\',\'" & dr("第一列") & "\',\'" & dr("第二列") & "\')"
    Dim cmd As new SQLCommand
    cmd.CommandText = sql
    cmd.ExecuteNonQuery
Next
DataTables("表b").load


--  作者:有点甜
--  发布时间:2017/8/9 22:44:00
--  
以后,尽量不要用_Identify列做关联了。
--  作者:luodang2050
--  发布时间:2017/8/9 23:04:00
--  
测试了下,提示如下
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 \'test2\' 中的标识列插入显式值。
--  作者:有点甜
--  发布时间:2017/8/9 23:11:00
--  

试试

 


DataTables("表b").datarows.Clear
For Each dr As DataRow In DataTables("表A").datarows
    Dim sql As String = "SET IDENTITY_INSERT 表B ON;insert into {表B} ([_Identify], 第一列,第二列) values(\'" &  dr("_Identify") & "\',\'" & dr("第一列") & "\',\'" & dr("第二列") & "\')"
    Dim cmd As new SQLCommand
    cmd.CommandText = sql
    cmd.ExecuteNonQuery
Next
DataTables("表b").load


--  作者:有点甜
--  发布时间:2017/8/9 23:14:00
--  

如果确实不行。

 

方法一:先把_Identify列改成不自动递增的列;

 

方法二:加一列编号列,把_Identify的值赋值过来,然后修改你的关联,改成用编号列关联。


--  作者:luodang2050
--  发布时间:2017/8/9 23:21:00
--  
谢谢,测试通过,但是dr在数据处理上有点问题
1、时间:原(null)改(1900-01-01 00:00:00.000)
2、文本:原(null)改()
3、整数:原(null)改(0)
这个问题怎么解决?

--  作者:luodang2050
--  发布时间:2017/8/10 0:08:00
--  
谢谢指导,再此基础上,已经进行了完善,直接sql数据库两表对烤,数据完美保真
            Dim 插入列 As String = ""
            \'Dim 插入值 As String = ""
            For Each dc As System.Data.DataColumn In dtr.basetable.Columns
                Dim dcn As String = dc.ColumnName
                If dcn.StartsWith("System_")
                Else
                    插入列 = 插入列 & "," & "[" & dcn & "]"
                    \'插入值 = 插入值 & "," & "\'" & dr(dcn) & "\'"
                End If
            Next
            插入列 = 插入列.TrimStart(",")
            \'插入值 = 插入值.TrimStart(",")
            Dim 原实例名 As String = ""
            Select Case coon1
                Case "IBMDMAIN"
                    原实例名 = "IBMD"
                Case Else
                    原实例名 = coon1
            End Select 
            Dim sql1 As String = "SET IDENTITY_INSERT {" & tbn2 & "} ON"
            Dim sql2 As String = "insert into {" & tbn2 & "} (" & 插入列 & ") sel ect " & 插入列 & " fro m [" & 原实例名 & "].[dbo].{" & tbn1 & "}"
            Dim sql3 As String = "SET IDENTITY_INSERT {" & tbn2 & "} OFF"
            Dim cmd0 As new SQLCommand
            cmd0.ConnectionName = coon2
            cmd0.CommandText = sql1 & ";" & sql2 & ";" & sql3
            cmd0.ExecuteNonQuery    

--  作者:有点甜
--  发布时间:2017/8/10 9:44:00
--  

你还可以用 select into 语句直接复制表的 http://www.w3school.com.cn/sql/sql_select_into.asp

 


--  作者:luodang2050
--  发布时间:2017/8/10 10:53:00
--  
这个更加效率,非常感谢