如何获取SQL for while循环的动态值?

How to get the dynamic values in SQL for while loop?

在我的方案中,我想在 SQL 中循环查询并需要更新详细信息。我有一个名为 employees 的员工 table,每个员工都将 empID 作为主键。我想从将 empID 作为外键的 empAddress table 中获取每个员工的地址信息。我想将每个员工的 ThumbID 值更新为 newID()。我怎样才能使用 sql 做到这一点?我已经尝试过 while 循环,但不知道如何获取 empID 来更新地址信息。我已经添加了我尝试过的示例代码。

Select * from employees

declare @emp_id int,@i int,@dataCount int;

set @dataCount = @@ROWCOUNT
Set @i = 1

WHILE @dataCount >= @i
BEGIN
    print @i
    select @emp_id = empId from employees
    Update empAddress set thumbID = newID() where empId = @emp_id
    Set @i = @i+1 
END ;

请指导我如何在 SQL 代码中获取动态的 @emp_id 值?我在 SQL 方面没有超级知识。提前致谢!

您只想更新所有有相应员工记录的 empAddress 记录,对吗?你不应该为此需要一个循环:

UPDATE empAddress SET thumbID = NEWID()
FROM empAddress 
INNER JOIN employees ON employees.empID = empAddress.empID

或者,假设每个 empAddress 都有一个 empID,只需:

UPDATE empAddress SET thumbID = NEWID()

在 SQL 中执行此操作的循环方式是使用游标,但请注意有多少人因为我提到存在游标而对我大吼大叫。 (它们效率低下,但很高兴了解 IMO。)这是一个示例,让您可以为每个员工 ID 调用一次 NEWID(),因此同一员工的所有地址都获得相同的唯一标识符:

DECLARE cur CURSOR FOR   
SELECT empID, NEWID() FROM employees

DECLARE @currentEmpID INT
DECLARE @currentNewID UNIQUEIDENTIFIER

OPEN cur  

FETCH NEXT FROM cur   
INTO @currentEmpID, @currentNewID

WHILE @@FETCH_STATUS = 0  
BEGIN       
    UPDATE empAddress 
    SET thumbID = @currentNewID
    WHERE empID = @currentEmpID

    FETCH NEXT FROM cur   
    INTO @currentEmpID, @currentNewID
END   
CLOSE cur;  
DEALLOCATE cur; 

empID   thumbID
1       FF358006-C41E-4632-BEB2-DF95E424B8CB
1       FF358006-C41E-4632-BEB2-DF95E424B8CB
2       DD19753C-1B4B-4D84-89F1-562DB4406A0F
2       DD19753C-1B4B-4D84-89F1-562DB4406A0F