首页 > 解决方案 > 如何读取一个表并在另一个表中插入不同的值

问题描述

之前,我在 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列)中的所有文件,然后恢复每行的五列,并将这些值加上默认值插入到第二个表中......

我不能让它工作

谢谢小伙伴。

标签: sqltsqlsql-server-2014

解决方案


以下是根据选择条件将选定行从表 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_Number 将帮助您从提供的起始索引开始生成数字。

in 子句 (Select 100) 确保 number 足够高于您希望 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

推荐阅读