SQL While Loop Insert со значениями из другой таблицы - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь создать цикл SQL While, который обновит временную таблицу значениями из другой таблицы. Значения из другой таблицы:

477286
560565
499330
391827
127375
526354
501736
357359
410433
500946
261297
377667
135931
235691
247239
143672
548752
471945
...

Написал следующее, однако последнее значение вставляется только несколько раз.

Вот код:

USE Reports
GO
    CREATE TABLE #TempTable (CreatedByID int, LastUpdatedByID int, ID int, 
AlertDE int, Alert char(50), StartDTTM datetime, EndDTTM datetime, 
IsInactiveFLAG char(1),AlertDetails char(1));
    DECLARE @numrows INT
    SELECT @numrows  = COUNT(*) FROM [Reports].[dbo].[Eligible]
    DECLARE @id int 
    DECLARE @LoopCount INT = 1
    DECLARE @count int = @numrows
    SELECT  @id = [id] FROM [Reports].[dbo].[Eligible]
WHILE (@LoopCount <= @count)
BEGIN  
    INSERT INTO #TempTable (CreatedByID, LastUpdatedByID, ID, AlertDE, Alert, StartDTTM, EndDTTM, IsInactiveFLAG,AlertDetails) 
    VALUES (52,52,@id,0,'Eligible',CURRENT_TIMESTAMP,'1900-01-01 
00:00:00.000','N','') 
    SET @LoopCount = @LoopCount + 1
END 
SELECT * FROM #TempTable
DROP TABLE #TempTable

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

Ответы [ 2 ]

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

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

DECLARE
  @LoopId  int
 ,@TheOrderNumber  varchar(20)

DECLARE @CheckThisItem TABLE
 (
   LoopId  int  not null  identity(1,1)
  ,TheOrderNumber varchar(20)  not null
 )

INSERT @CheckThisItem 
SELECT Order_Number AS TheOrderNumber
FROM [dbo].[Table_Storing_Order_Number] ORDER BY Order_Number ASC
SET @LoopId = @@rowcount
WHILE @LoopId > 0
   BEGIN  
     SELECT @TheOrderNumber = TheOrderNumber
     FROM @CheckThisItem
     WHERE LoopId = @LoopId
-- Start inserting record pulled for while loop
        INSERT [dbo].[The_Destination_Table]
            SELECT TOP (1)
            A, B, C, D
            FROM [dbo].[Source_Table] ST
            WHERE 
            ST.Order_Number = @TheOrderNumber
        -- Set number to reduce loop counter
    SET @LoopId = @LoopId - 1
 END;  
0 голосов
/ 05 мая 2018

Почему вы используете цикл? Вы можете сделать это с помощью оператора insert . . . select:

INSERT INTO #TempTable (CreatedByID, LastUpdatedByID, ID, AlertDE, Alert, StartDTTM, EndDTTM, IsInactiveFLAG, AlertDetails) 
    SELECT(52, 52, e.id, 0, 'Eligible', CURRENT_TIMESTAMP, '1900-01-01 00:00:00.000', 'N', ''
    FROM [Reports].[dbo].[Eligible] e ;
...