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)
我假设我必须告诉它以某种方式循环遍历另一个表中的值,但如果这是正确的方法,或者总的来说我在公共汽车上走了很长一段路,我并不乐观。
你为什么使用循环?你可以用一个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。