执行更新时存储过程失败

2024-02-07

我正在使用 PHP 的 SQL Server 驱动程序连接到 SQL Server 2008 Express。现在,我正在尝试用存储过程替换所有 SELECT、UPDATE 和 INSERT 语句。这对于只包含 SELECT 语句的 SP 来说效果很好。但现在我尝试进行更新,但不断收到错误消息“直接执行 SQL;没有游标。”。我可以使用相同的参数值从 Management Studio 调用 SP 罚款。

有任何想法吗?

干杯 亚历克斯

编辑:这是一个更新过程。有趣的是,该过程实际上执行得很好,并且像预期的那样更新了数据。但它仍然返回错误,导致异常。

首先,失败的 PHP 代码:

if (! $this->Result = sqlsrv_query($this->Conn, $strQuery, $arrParameters, array("Scrollable"=>SQLSRV_CURSOR_STATIC)))
{
    $this->sendErrorMail($strQuery, $arrParameters);
    throw new Exception(4001);
}

SQL

USE [testsite]  
GO  
/****** Object:  StoredProcedure [dbo].[Items_countDownload]    Script Date: 09/09/2010 18:03:28 ******/  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
-- =============================================  
-- Author:      Alexis Hildebrandt  
-- Create date: 2010-09-09  
-- Description: Increases the download count by 1  
-- =============================================  
ALTER PROCEDURE [dbo].[Items_countDownload]  
    @Id INT  
AS  
BEGIN  
    -- SET NOCOUNT ON added to prevent extra result sets from  
    -- interfering with SELECT statements.  
    SET NOCOUNT ON;  

    DECLARE @DownloadCount INT = 0, @MaxCount INT = 0, @Id2 INT = 0  

    DECLARE itemCursor CURSOR SCROLL
    FOR
        SELECT Id, Downloads
        FROM Items
        WHERE Id = @Id
        OR SKU IN 
        (
            SELECT SKU FROM Items WHERE Id = @Id
        )
    FOR UPDATE OF Downloads

    OPEN itemCursor

    FETCH NEXT FROM itemCursor
    INTO @Id, @DownloadCount;

    -- Find the largest Download count across all versions of the item
    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF @MaxCount < @DownloadCount
            SET @MaxCount = @DownloadCount;
        FETCH NEXT FROM itemCursor
        INTO @Id, @DownloadCount;
    END

    -- Increase the download count by one for all versions
    FETCH FIRST FROM itemCursor
    INTO @Id, @DownloadCount;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        UPDATE Items 
        SET Downloads = @MaxCount + 1
        WHERE CURRENT OF itemCursor
        FETCH NEXT FROM itemCursor
        INTO @Id, @DownloadCount;
    END

    CLOSE itemCursor;
    DEALLOCATE itemCursor;
END

查看权限:直接执行SQL;没有光标 http://griffo.info/tellme/2009/05/executing-sql-directly-no-cursor/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行更新时存储过程失败 的相关文章

随机推荐

  • 如何在Swing中画蛇?

    我对 Java Swing 相当陌生 正在为我的大学课程开发一个梯子和蛇形项目 老师告诉我们实现一个游戏 玩家可以准确选择游戏板上有多少条蛇以及蛇的位置 梯子也是如此 所以我不能在游戏中使用一个或多个固定图像 这样玩家就无法再更改它们 我需
  • 具有 @ManyToOne 关系的 QueryDSL 投影

    我将 OpenJPA 与 QueryDSL 一起使用 我尝试通过使用 QueryDSL 的 bean 投影功能来避免操作 Tuple 对象 例如 我有这两个实体 具有 ManyToOne 关系 Entity public class Fol
  • 在临时表列 SQL 中设置排序规则的正确方法

    我有一个临时表 它使用批量插入来插入数据 但是 当我想将临时表中的数据更新到普通表时 它会出现排序规则问题 我知道如何通过使用类似的方法来解决这个问题 UPDATE RegularTable SET r Column1 t ColumnA
  • 在哪里可以找到 Java 语法突出显示库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在用 Java 编写一个源代码编辑器 用于 Java 源代码 并且我想添加简单的语法突出显示 关键
  • 我试图在 bulma css 上使用汉堡菜单,但它不起作用。怎么了?

    我是 bulma css 新手http bulma io http bulma io 我正在尝试为移动用户使用汉堡菜单 我只是按照此页面上的说明进行操作 http bulma io documentation components nav
  • 对一组事实进行排序 CLIPS

    我正在尝试根据基于两个字段的比较器对 CLIPS 中的事实集合进行排序 不幸的是 我无法理解为什么如果传递的两个事实中第一个字段相同 则比较器 显然是正确的 会打印 2 我的比较器 deffunction MAIN rating sort
  • C++ 按位复制与按成员复制? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Javascript Set() 中的成员数量是否有限制?或者这是V8中的一个错误

    下面是一些简单的 Javascript 代码 它将整数重复添加到 Set 中 var i var limit 1 lt lt 24 var s new Set for i 0 i lt limit 10 i s add i if i gt
  • 关机还是不关机?在ExecutorService(Java8)中

    我试图了解执行程序服务相对于关闭的行为 文档说 除非有 shutdown 调用 否则应用程序不会终止 但在这个简单的示例中 它会在一分钟后精确退出 任何想法 Runnable r new Runnable Override public v
  • 调整阈值cros_val_score sklearn

    有没有办法设置sklearn的cross val score阈值 我训练了一个模型 然后将阈值调整为 0 22 型号如下 Try with Threshold pred proba LGBM Model predict proba X te
  • Python 3 Windows 服务仅在调试模式下启动

    我首先在中发布了答案这个帖子 https stackoverflow com questions 42586805 python 3 windows service 但不符合论坛标准 我希望这次的回答符合论坛标准 这段代码应该更加清晰易读
  • 当参数未显式传递时,默认使用 lambda 进行用户输入

    我写了下面的代码 仍然想知道它的用途 https codereview stackexchange com questions 242702 how effective is it to default to user input in c
  • Visual Studio 在调试时跳到每隔一行

    我现在尝试单步执行代码 Visual Studio 会跳过所有其他行 我知道它是每隔一个 因为当我有一个 ForEach 循环时 它会碰到在以后的迭代中跳过的行 Visual Studio 是否有任何逻辑原因跳过其他行 UPDATE 我添加
  • 如何迭代 Array.prototype 函数

    我想将所有数组函数包装在数组对象中 但在控制台中 gt gt gt Array prototype gt gt gt prototype undefined 但是当我输入时Array prototype在控制台中它显示自动完成中的所有功能
  • System.Diagnostics.Trace.WriteLine 的结果在哪里?

    在我的代码中 我使用以下命令编写了一些跟踪消息System Diagnostics Trace WriteLine 但是我可以从哪里获取消息呢 我查看了事件查看器 但没有找到它们 Are you debugging Look at the
  • 将 Google Maps JS API ImageMapType 剪辑为多边形

    如何将 Google 地图中的 MapType 剪辑为任意多边形 例如 如果我有一个自定义图像映射类型 https developers google com maps documentation javascript maptypes I
  • Typescript:调用另一个类的“方法”

    我对 java type script 很陌生 在理解它们的概念时遇到了一些困难 我想打电话给method另一个班级的 然而 到目前为止我还没有成功 export class Foo calcSomeThing parameter numb
  • 如何仅使用 javascript 更改 onclick 按钮颜色?

    我试图使用 onclick 和 getElementsByClassName 更改按钮的颜色 并想出了这样的结果 HTML
  • Android 2.3 Webview 中的希伯来字体

    我正在将一个显示希伯来语的应用程序移植到 Android 2 3 2 3 模拟器在 TextView 中正确显示字符串 但是当我尝试将字符串放入 WebView 中时 WebView 只显示乱码 这告诉我希伯来语字体在模拟器中可用 但 we
  • 执行更新时存储过程失败

    我正在使用 PHP 的 SQL Server 驱动程序连接到 SQL Server 2008 Express 现在 我正在尝试用存储过程替换所有 SELECT UPDATE 和 INSERT 语句 这对于只包含 SELECT 语句的 SP