鉴于此 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 在返回结果之前“等待”语句完全执行完毕?