none
从旧表插入数据到新表的疑问 RRS feed

答案

  • LZ说的应该是这样吧

    USE [tempdb]
    GO
    --建立测试表
    --新表
    CREATE TABLE t
        (
          id INT IDENTITY(1, 1) PRIMARY KEY ,
          fatherid INT
        )
    
    --旧表
    CREATE TABLE tt
        (
          orgName INT IDENTITY(1, 1) PRIMARY KEY ,
          fullname INT
        )
    
    --插入20条测试记录到旧表
    INSERT INTO [dbo].[tt]
    SELECT  20*RAND()
    GO 20
    
    --插入20条测试记录到新表
    INSERT INTO [dbo].[t]
    SELECT  0
    GO 20
    
    
    
    
    SELECT * FROM [dbo].[tt]
    SELECT * FROM [dbo].[t]
    
    --更新新表
    UPDATE  [t] 
    SET     t.[fatherid] =tt.[fullname]
    FROM t  INNER JOIN tt  ON t.[id]=tt.[orgName]

    • 已标记为答案 彭123 2013年12月8日 3:02
    2013年12月7日 13:25

全部回复

  • 新表

    2013年12月7日 7:57
  • 请问怎样让新表的父节点获得有效的值。就是获得ID列的值。
    我的旧表准备抛弃了,我想的是新表中用【ID】列取代PCode,然后用【父节点】列取代OrgCode列。


    • 已编辑 彭123 2013年12月7日 9:01
    2013年12月7日 7:59
  • 不是很明白??

    父节点获得ID列的值?那么旧表有什么用呢?

    你的id字段是唯一并且自增的话,用update更新

    LZ可以参考一下下面脚本

    USE [tempdb]
    GO
    --建立测试表
    CREATE TABLE tt
        (
          id INT IDENTITY(1, 1)
                 PRIMARY KEY ,
          fatherid INT
        )
    --插入20条测试记录
    INSERT INTO [dbo].[tt]
    SELECT  0
    GO 20
    
    
    SELECT * FROM [dbo].[tt]
    
    
    
    --获取表的记录行数,然后循环赋值给[fatherid]列
    DECLARE @ROWCOUNT INT
    SELECT  @ROWCOUNT = COUNT(*) FROM    [dbo].[tt]
    WHILE @ROWCOUNT > 0
        BEGIN
            UPDATE  [dbo].[tt]
            SET     [fatherid] = [id]
            WHERE   ID = @ROWCOUNT
            SET @ROWCOUNT = @ROWCOUNT - 1
        END
    
    


    2013年12月7日 8:48
  • 我的旧表准备抛弃了,我想的是新表中用【ID】列取代PCode,然后用【父节点】列取代OrgCode列。
    • 已编辑 彭123 2013年12月7日 9:02
    2013年12月7日 8:58
  • 不是很明白??

    父节点获得ID列的值?那么旧表有什么用呢?

    你的id字段是唯一并且自增的话,用update更新

    LZ可以参考一下下面脚本

    USE [tempdb]
    GO
    --建立测试表
    CREATE TABLE tt
        (
          id INT IDENTITY(1, 1)
                 PRIMARY KEY ,
          fatherid INT
        )
    --插入20条测试记录
    INSERT INTO [dbo].[tt]
    SELECT  0
    GO 20
    
    
    SELECT * FROM [dbo].[tt]
    
    
    
    --获取表的记录行数,然后循环赋值给[fatherid]列
    DECLARE @ROWCOUNT INT
    SELECT  @ROWCOUNT = COUNT(*) FROM    [dbo].[tt]
    WHILE @ROWCOUNT > 0
        BEGIN
            UPDATE  [dbo].[tt]
            SET     [fatherid] = [id]
            WHERE   ID = @ROWCOUNT
            SET @ROWCOUNT = @ROWCOUNT - 1
        END
    


    不好意思,没有描述清楚

    我的旧表准备抛弃了,我想的是新表中用【ID】列取代PCode,然后用【父节点】列取代OrgCode列。

    2013年12月7日 9:03
  • 我记忆中我应该会的啊,为什么一下子就不会做了啊。。。。。。。。。。。。。。。
    2013年12月7日 9:05
  • 取代:你的意思是说把旧表的数据插入到新表?
    2013年12月7日 10:07
  • 取代:你的意思是说把旧表的数据插入到新表?

    是,将旧表中的orgName和fullname拷出就够了,然后根据旧表的orgcode和pcode中的值生成新表。

    现在唯一想到的方法,似乎只能在C#做循环赋值了。唉,应该有办法在SQL中直接解决的啊。

    2013年12月7日 10:23
  • LZ说的应该是这样吧

    USE [tempdb]
    GO
    --建立测试表
    --新表
    CREATE TABLE t
        (
          id INT IDENTITY(1, 1) PRIMARY KEY ,
          fatherid INT
        )
    
    --旧表
    CREATE TABLE tt
        (
          orgName INT IDENTITY(1, 1) PRIMARY KEY ,
          fullname INT
        )
    
    --插入20条测试记录到旧表
    INSERT INTO [dbo].[tt]
    SELECT  20*RAND()
    GO 20
    
    --插入20条测试记录到新表
    INSERT INTO [dbo].[t]
    SELECT  0
    GO 20
    
    
    
    
    SELECT * FROM [dbo].[tt]
    SELECT * FROM [dbo].[t]
    
    --更新新表
    UPDATE  [t] 
    SET     t.[fatherid] =tt.[fullname]
    FROM t  INNER JOIN tt  ON t.[id]=tt.[orgName]

    • 已标记为答案 彭123 2013年12月8日 3:02
    2013年12月7日 13:25