Вставить новую таблицу Row of Real на основе цикла, выполненного для временной таблицы - PullRequest
1 голос
/ 13 марта 2019

Очевидно, что приведенный ниже код неверен, но вам придется простить это, поскольку я раньше не делал циклы в SQL.

While (Select oldSysNr, DoW.DoWC, DoW.WorkStart, DoW.WorkEnd, DoW.ContractHours From #TempTable 
Join AppData.TSCHEDDOW as DoW 
On DoW.ShiftSystemNumber = oldSysNr)


    Insert into AppData.TSCHEDDOW 
    (
        #TempTable.newSysNr,
        DoWC,
        WorkStart,
        WorkEnd,
        ContractHours
    )
    Select
    #TempTable.newSysNr,
    DoWC,
    WorkStart,
    WorkEnd,
    ContractHours
    From AppData.TSCHED 
End;

Предполагаемый результат состоит в том, что это циклически повторяет oldSysNr в tempTable и, когда это и AppData.TSCHEDDOW SysNr совпадают, тогда он вставляет новые строки в AppData.TSCHED, причем только newSysNr является атрибутом, который изменяется, сохраняя старые строки.

Вот желаемые результаты:

AppData.TSCHEDDOW
    SysNr   DoWC   WorkStart   WorkEnd  ContractHours
    --------------------------------------------------
    24      1        12:00      8:00         8
    25      2        12:00      8:00         8
    26      2        9:00       6:00         8
    27      5        7:00       3:00         8
    54      1        12:00      8:00         8
    55      2        12:00      8:00         8
    56      2        9:00       6:00         8
    57      5        7:00       3:00         8

Мой вопрос сейчас состоит в том, что я делаю не так с этим циклом, и что я должен делать вместо этого? Буду очень признателен за любую помощь, которую я смогу получить, и ресурсы, на которые можно будет обратиться по этому вопросу.

Вот пример данных:

#TempTable
oldSysNr     newSysNr
------------------------
24            54
25            55
26            56
27            57

AppData.TSCHEDDOW
        SysNr   DoWC   WorkStart   WorkEnd  ContractHours
        --------------------------------------------------

        24      1        12:00      8:00         8
        25      2        12:00      8:00         8
        26      2        9:00       6:00         8
        27      5        7:00       3:00         8

Информация, из которой заполняется newSysNr, поступает из той же таблицы, что и oldSysNr, это результат создания временной таблицы, в которой само присоединение основано на параметре year, одна из которых - год, который копируется, и год, в котором Вся эта информация будет скопирована. Если что-то еще нужно, чтобы полностью ответить на этот вопрос, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 13 марта 2019

Если вы понимаете, что вы на самом деле описываете, я думаю, все, что вам нужно, это простое UPDATE утверждение:

CREATE TABLE TSCHEDDOW (SysNr int,
                        DoWC int,
                        WorkStart time,
                        WorkEnd time,
                        ContractHours int)
INSERT INTO TSCHEDDOW
VALUES(24,1,'12:00','8:00',8),
      (25,2,'12:00','8:00',8),
      (26,2,'9:00','6:00',8),
      (27,5,'7:00','3:00',8)

CREATE TABLE #temp (oldSysNr int,newSysNr int)
INSERT INTO #temp
VALUES(24,54),
      (25,55),
      (26,56),
      (27,57);

UPDATE TS
SET SysNr = T.newSysNr
FROM TSCHEDDOW TS
     JOIN #temp T ON TS.SysNr = T.oldSysNr

DB <> Fiddle

Редактировать: вот мои «дополнительные» догадки, но в противном случае им нужно объяснить больше и показать ожидаемые результаты:

INSERT INTO TSCHEDDOW (SysNr,DoWC, WorkStart, WorkEnd, ContractHours)
SELECT T.newSysNr,
       TS.DoWC,
       TS.WorkStart,
       TS.WorkEnd,
       TS.ContractHours
FROM TSCHEDDOW TS
     JOIN #temp T ON TS.SysNr = T.oldSysNr;

DB <> Fiddle

ALTER TABLE TSCHEDDOW ADD NewSysNr int;

....

UPDATE TS
SET newSysNr = T.newSysNr
FROM TSCHEDDOW TS
     JOIN #temp T ON TS.SysNr = T.oldSysNr;

DB <> Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...