【问题标题】:How can read a table and insert differents values in another table如何读取一个表并在另一个表中插入不同的值
【发布时间】:2018-05-10 15:32:46
【问题描述】:

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

我不能让它工作

谢谢小伙伴们。

【问题讨论】:

  • 您在循环中丢失了一次提取
  • @paparazzo。它位于循环内的第一个选择中。
  • 您可能想要进行格式化
  • @paparazzo。好的...

标签: sql tsql sql-server-2014


【解决方案1】:

以下是根据选择条件将选定行从表 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

【讨论】:

  • 感谢您的回复。问题是 table2 有一个 pk 不是自动递增的,那么你如何设置这个值?我声明了一个程序,您可以在其中获得最大 pk 并在循环中手动增加它。随意问我你需要什么。干杯。
  • 我做了一些改动,看看它们是否适合你。
  • 我能理解你的回答。您正在使用伪代码,我需要这些句子。谢谢老兄。
  • 试图修改它以适应您的表结构
  • 我要到明天才能测试它,但我投票赞成你的答案只是为了你的努力。明天我会尝试它,如果值得的话我会接受答案......
【解决方案2】:

最后经过一番研究,并尝试了很多,我找到了我发布的解决方案,以帮助其他类似案例。希望对您有所帮助。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2020-08-21
    • 2014-07-14
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多