代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

如何读取一个表并在另一个表中插入不同的值

  •  0
  • Kenzo_Gilead  · 技术社区  · 6 年前

    在这之前,我对sql编程相当陌生。我正在尝试编写一个脚本,从一个表中读取行,并将这些值(以及其他默认值)插入到另一个表中。

    据我所知,这是我最好的一次拍摄…:(

    declare @pk_tercero_contacto int, @tercero_id int, @login nvarchar(200), @defecto bit, 
    @descripcion nvarchar(200), @notificaciones bit, @tercero_usuario1 cursor
    
    select @pk_tercero_contacto = max(t.tercero_id)  from TD_TERCERO_CONTACTO t
    set @pk_tercero_contacto  = (@pk_tercero_contacto + 1)
    
    declare tercero_usuario cursor FOR select t.LOGIN, t.TERCERO_ID, t.DEFECTO,
    t.DESCRIPCION, t.NOTIFICACIONES from TD_TERCERO_USUARIO t
    
    OPEN @tercero_usuario  
    FETCH NEXT FROM tercero_usuario
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN 
    
    select @tercero_id = t.tercero_id, @login = t.login, @defecto = t.defecto, 
    @descripcion = t.descripcion, @notificaciones = t.notificaciones from 
    @tercero_usuario t FETCH NEXT FROM tercero_usuario into @tercero_usuario1  
    
    insert into TD_TERCERO_CONTACTO values(@pk_tercero_contacto, @login, null, null, 
    @descripcion, @notificaciones, @tercero_id, null, null, null, @defecto)
    
    set @pk_tercero_contacto = @pk_tercero_contacto + 1
    
    END  
    
    CLOSE tercero_usuario;  
    DEALLOCATE tercero_usuario;  
    GO  
    

    其思想是恢复第一个表(5列)中的所有文件,然后恢复每行的5列,并在第二个表中插入这些值加上默认值。。。

    我不能让它工作

    谢谢朋友们。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Pravin .Kadam    6 年前

    以下是根据选择条件将表1中的选定行插入表2的示例格式。

    我编辑了查询以满足您手动为表2生成主键的要求

    Declare @pk_StartIndex int
    
    Set @pk_StartIndex = 79   --This is initial index that you will have to set 
    manually, for each row returned in select query below the index value will 
    be incremented by one
    
    INSERT INTO table2 (PrimaryKey, column1, column2, column3)
        SELECT @pk_StartIndex + Row_Number() Over(Order By (Select 100)) 
        column1, column2, column3
        FROM table1
        WHERE condition
    

    Row\u编号将帮助您从提供的起始索引开始生成编号。

    在子句(Select 100)中,确保数字足够大,以使Select查询返回的行数足够大

    DECLARE @pk_tercero_contacto int
    
    SELECT @pk_tercero_contacto = max(tercero_id)  FROM TD_TERCERO_CONTACTO 
    
    INSERT INTO TD_TERCERO_CONTACTO (tercero_id, login, <your column name>, 
    <your column name>, description, notificaciones, <your column name>, <your 
    column name>, <your column name>, <your column name>,  defecto)
    
    SELECT @pk_tercero_contacto + Row_Number() Over(Order By (Select 100)), 
    t.login, null, null, t.description, t.notificaciones, t.tercero_id, null, 
    null, null, t.defecto
    
    FROM TD_TERCERO_USUARIO as t
    
        2
  •  0
  •   Kenzo_Gilead    6 年前

    最后,在做了一点研究并尝试了很多之后,我找到了我发布的解决方案,以帮助类似案例中的其他人。希望有帮助。

    Declare @var1 nvarchar(200)
    Declare @var2 int
    Declare @var3 bit
    Declare @var4 nvarchar(200)
    Declare @var5 bit
    
            DECLARE cursor CURSOR FOR Select column1, column2, column3, column4, column5 from table1
            OPEN cursor
                FETCH NEXT FROM cursor INTO @var1, @var2, @var3, @var4, @var5
                WHILE @@FETCH_STATUS = 0
                    BEGIN
    
                        Insert into table2 VALUES (@var2, @var1, null, null, 
                        @var3, @var4, null, null, null, @var5)
    
                    FETCH NEXT FROM cursor INTO @var1, @var2, @var3, @var4, @var5
                    END
            CLOSE cursor;
            DEALLOCATE cursor;