1

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

4

1 回答 1

1

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

update table2
    set cola = t1.col1
from table2 t2
join table1 t1 on t1.col2 = t2.colb
于 2012-11-06T13:56:17.180 回答