カーソルを使用してテーブルの各行をループし、別のテーブルの行を更新する次の 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 に「待機」するように指示する方法はありますか?