Как можно прочитать таблицу и вставить разные значения в другую таблицу - PullRequest
0 голосов
/ 10 мая 2018

Раньше я совсем новичок в программировании 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 столбцов), затем восстановить пять столбцов в каждой строке и вставить эти значения плюс значения по умолчанию во вторую таблицу ...

Я не могу заставить его работать

Спасибо, приятели.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Наконец, после небольшого исследования и много попыток, я нашел решение, которое выкладываю, чтобы помочь другим в подобном случае. Надеюсь, это поможет.

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;
0 голосов
/ 10 мая 2018

Ниже приведен пример формата для вставки выбранных строк из таблицы 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 поможет вам сгенерировать числа, начиная с предоставленного индекса начала.

в предложении (выберите 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
...