You don't need to loop to insert these records and there is nothing to update, unless your example is incomplete.
DROP TABLE IF EXISTS TableA;
DROP TABLE IF EXISTS TableB;
CREATE TABLE TableA (ID INT, CreatedDate DATE, CreatedBy VARCHAR(100));
CREATE TABLE TableB (ID INT, StageNo INT, Comments VARCHAR(100));
INSERT INTO TableA VALUES
(1,'2020-10-06','xyz'),
(2,'2020-10-07','abc'),
(3,'2020-10-08','xyz'),
(4,'2020-10-09','xyz'),
(5,'2020-10-10','xyz'),
(6,'2020-10-11','xyz')
;With NumberSequence( Number ) as
(
Select 1 as Number
union all
Select Number + 1
from NumberSequence
where Number < 100
)
INSERT INTO TableB (ID, StageNo)
SELECT
a.ID,
n.Number as StageNo
FROM TableA a
CROSS APPLY NumberSequence n
WHERE NOT EXISTS (SELECT 1 FROM TableB b WHERE b.ID = a.ID AND b.StageNo = n.Number)