Here is an example of how you can use cursors to create loops:
declare @table_a table (PK_TableA_ID int)
declare @table_b table (PK_TableB_ID int)
insert @table_a values (1),(2),(3)
insert @table_b values (4),(5),(6)
SET NOCOUNT ON
DECLARE @TableA_ID int, @TableB_ID int
DECLARE TableA_cursor CURSOR FOR SELECT PK_TableA_ID FROM @table_a
OPEN TableA_cursor
FETCH NEXT FROM TableA_cursor INTO @TableA_ID
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE TableB_cursor CURSOR FOR SELECT PK_TableB_ID FROM @table_b
OPEN TableB_cursor
FETCH NEXT FROM TableB_cursor INTO @TableB_ID
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CAST(@TableA_ID AS CHAR(1)) + ':' + CAST(@TableB_ID AS CHAR(1))
FETCH NEXT FROM TableB_cursor INTO @TableB_ID
END
CLOSE TableB_cursor
DEALLOCATE TableB_cursor
FETCH NEXT FROM TableA_cursor INTO @TableA_ID
END
CLOSE TableA_cursor
DEALLOCATE TableA_cursor
The cursor above (with test data in temporary tables) will generate this output:
1:4
1:5
1:6
2:4
2:5
2:6
3:4
3:5
3:6
.