Php sqlsrv_查询中的游标不工作

Php sqlsrv_查询中的游标不工作,php,sql,cursor,Php,Sql,Cursor,给定此SQL语句,该语句使用游标循环遍历表中的每一行并更新另一个表中的一行: DECLARE @x varchar(100) DECLARE @y varchar(100) DECLARE c CURSOR FOR SELECT col1, col2 FROM table OPEN c FETCH NEXT FROM c INTO @x, @y WHILE @@FETCH_STATUS = 0 BEGIN UPDATE table2 SET cola = @x WHERE colb = @y F

给定此SQL语句,该语句使用游标循环遍历表中的每一行并更新另一个表中的一行:

DECLARE @x varchar(100)
DECLARE @y varchar(100)
DECLARE c CURSOR FOR
SELECT col1, col2 FROM table
OPEN c
FETCH NEXT FROM c INTO @x, @y
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE table2 SET cola = @x WHERE colb = @y
FETCH NEXT FROM c INTO @x, @y
END
CLOSE c
DEALLOCATE c;
如果我直接在SQL控制台或Navicat中运行此语句,则一切都会按预期运行。但如果我在PHP中使用以下命令运行它:

sqlsrv_query($sql)
只有表2中的一些行被实际更新。SQL语句中的游标似乎没有正确执行,也许sqlsrv_查询在语句的游标仍在运行时返回


有没有一种方法可以指示sqlsrv_query在返回结果之前“等待”语句完全执行完毕?

用类似这样的方法代替光标怎么样。我必须编写游标的唯一原因是将旧模型转换为新模型,以便为转换运行一些业务规则等。我没有在生产中运行任何游标

update table2
    set cola = t1.col1
from table2 t2
join table1 t1 on t1.col2 = t2.colb

用这样的东西代替光标怎么样。我必须编写游标的唯一原因是将旧模型转换为新模型,以便为转换运行一些业务规则等。我没有在生产中运行任何游标

update table2
    set cola = t1.col1
from table2 t2
join table1 t1 on t1.col2 = t2.colb

你考虑过存储过程吗?我不想创建一个,但可能必须尝试。你考虑过存储过程吗?我不想创建一个,但可能必须尝试。啊!更新自!我怎么会忘记呢?这个解决方案非常有效。救了我一天,谢谢你让我恢复理智。啊!更新自!我怎么会忘记呢?这个解决方案非常有效。救了我一天,谢谢你让我恢复理智。