【问题标题】:cursor in sqlsrv_query not workingsqlsrv_query 中的游标不起作用
【发布时间】:2012-11-06 13:45:25
【问题描述】:

假设这条 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 在返回结果之前“等待”语句完全执行完毕?

【问题讨论】:

  • 你考虑过存储过程吗?
  • 我不想创建一个,但可能必须尝试一下。

标签: php sql cursor


【解决方案1】:

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

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

【讨论】:

  • 啊!更新自!我怎么会忘记?该解决方案完美运行。拯救了我的一天,感谢你让我重新振作起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多