当前位置: 首页 > 面试题库 >

如何在SQL Server 2008中的存储过程中写入游标

支智志
2023-03-14
问题内容

我的数据库中有两个表

优惠券表

  • id (int)
  • Name (nvarchar(max))
  • NoofUses (int)

优惠券使用表

  • id(int)
  • Couponid(int)
  • CreateDate(datetime)

每当用户单击优惠券时,都会在CouponUse表中输入包含该优惠券ID的条目

现在,coupon表中有一列称为NoofUses。我想在存储过程中编写一个游标,该存储过程遍历couponuse表并查看一张优惠券有多少行,并将该数字填入NoofUses优惠券的字段中。

我有这个查询

  select COUNT(*) as totalcount , Name as name from Coupon as coupon 
  join CouponUse as couponuse on coupon.id = couponuse.couponid
  group by couponuse.couponid , coupon.Name

这给了我优惠券的名称及其数量 couponuse

但是我不知道如何使用游标在存储过程中实现它?

您对问题的任何询问将不胜感激,谢谢


问题答案:

仅使用一个简单的UPDATE语句有什么问题?

UPDATE dbo.Coupon
SET NoofUses = (SELECT COUNT(*) FROM dbo.CouponUse WHERE Couponid = dbo.Coupon.ID)

这就是所有需要的!没有凌乱和复杂的游标,没有循环,没有RBAR(逐行扫描)处理......只是一个漂亮,简单,干净的基于集合的SQL语句。



 类似资料:
  • 问题内容: 我正在学习如何编写存储过程。我知道了,但我没有。我知道事情是这样的。 因此,我被困住了,我试图理解的是。编写一个存储过程,该过程接受一个Territory ID,Territory Description和Region ID,并将它们作为新行插入Northwind的Territories表中。 好吧,我知道我可以做这样的事情,我相信: 但是那我可能是错的。但我不知道在哪里插入然后作为表

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 场景:我有一个存储过程,它基于两个输入从表中获取数据:一个日期和一个字符串(这是一个列名)。第一个过程是从另一个过程调用的,该过程使用光标循环表中的行,并将每一行传递给第一个过程的字符串(要检查的列名)。我对第二个过程(即直接调用的过程)的输入是日期。 问题:当我单独调用它时,我的第一个过程运行良好。我的第二个过程是抛出一些我不知道如何修复的语法错误。 Obs:我已经在这里检查了关于这个主题的一些

  • 问题内容: 我有这个存储过程。例如,如何间隔5秒运行一次?像删除时间戳超过一天的数据的例程一样? 问题答案: 您可以使用mysql Scheduler每5秒运行一次。您可以在以下网址找到示例:http://dev.mysql.com/doc/refman/5.1/en/create- event.html 从未使用过它,但我希望它能起作用:

  • 问题内容: 我为几个表创建触发器。触发器具有相同的逻辑。我将要使用一个通用的存储过程。但是我不知道如何处理 插入 和 删除的 表。 例子: 问题答案: 您可以使用表值参数存储触发器中插入/删除的值,并将其传递给proc。例如,如果您在proc中所需的全部是UNIQUE : 然后从触发器中传递插入/删除的ID,例如: