sqlsrv_query中的游标不起作用

时间:2012-11-06 13:45:26

标签: 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
FETCH NEXT FROM c INTO @x, @y
END
CLOSE c
DEALLOCATE c;

如果我直接在SQL控制台或Navicat中运行此语句,一切都按预期工作。但是如果我使用以下代码在PHP中运行它:

sqlsrv_query($sql)

只有table2中的某些行实际更新。似乎SQL语句中的游标没有正确执行,也许sqlsrv_query在语句的游标仍在运行时返回?

有没有办法指示sqlsrv_query“等待”,直到语句完全执行完毕才返回结果?

1 个答案:

答案 0 :(得分:1)

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

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