SQL While 循环插入另一个表中的值

GMR*_*GMR 1 sql t-sql sql-server

我正在尝试创建一个 SQL While 循环,它将使用另一个表中的值更新临时表。另一个表中的值:

477286
560565
499330
391827
127375
526354
501736
357359
410433
500946
261297
377667
135931
235691
247239
143672
548752
471945
...
Run Code Online (Sandbox Code Playgroud)

但是,编写了以下内容,它只会多次插入最后一个值。

这是代码:

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
Run Code Online (Sandbox Code Playgroud)

我假设我必须告诉它以某种方式循环遍历另一个表中的值,但如果这是正确的方法,或者总的来说我在公共汽车上走了很长一段路,我并不乐观。

Gor*_*off 7

你为什么使用循环?你可以用一个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 ;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见例如https://www.w3schools.com/sql/sql_insert_into_select.asp

  • 因此我提到了“绕着巴士走很长的路”,哈哈!这让我想起了我的朋友向我展示油表上的箭头指示油箱盖在汽车的哪一侧的时候。 (2认同)