回答

收藏

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

技术问答 技术问答 197 人阅读 | 0 人回复 | 2023-09-14

我的数据库中有两个表3 n3 j! F; d  m( v% i9 c7 n4 p
优惠券表& G! g) U/ i! Y# c1 m
id (int)
" @0 @: f% i$ T/ y+ d4 h3 B- ^Name (nvarchar(max))2 i- ]* E, b9 B
NoofUses (int)2 H- a4 t4 M5 P1 p4 Y

- r4 ]; D8 z+ _5 l" d# d  o, Q+ Y优惠券使用表' b0 B  P* r+ G- z, {( |* u
id(int)6 O- {4 f) k9 W  [# H3 M
Couponid(int)
" s% y) L) n, A% V2 i) }6 iCreateDate(datetime)
0 k8 q! {+ f+ V, c4 P& m
* Q) m3 a% e( P# G3 G9 K2 ]
每当用户单击优惠券时,都会在CouponUse表中输入包含该优惠券ID的条目
' n# Z* C4 g1 t( a现在,coupon表中有一列称为NoofUses。我想在存储过程中编写一个游标,该存储过程遍历couponuse表并查看一张优惠券有多少行,并将该数字填入NoofUses优惠券的字段中。9 K7 U% U4 R/ I3 G: W6 `
我有这个查询; W" j* u( r$ r* H0 Z5 C5 {
  select COUNT(*) as totalcount , Name as name from Coupon as coupon
' {  S& f6 W/ w: a  join CouponUse as couponuse on coupon.id = couponuse.couponid. q- S) z. l' L2 c1 T8 S3 j$ d% d0 v
  group by couponuse.couponid , coupon.Name6 R- \! ~3 Q7 e9 d
这给了我优惠券的名称及其数量 couponuse
8 {7 Y! v5 A4 Z/ Y  |但是我不知道如何使用游标在存储过程中实现它?
% M, z* m& D7 r您对问题的任何询问将不胜感激,谢谢
' ^( K2 N7 o$ F& i                2 j" l5 I% h5 `, Y7 S
解决方案:% F: Q; q( ]) m  j# K
               
; O% {: x3 q8 h# Z, q, N) c/ c
; B* w  m: Q( y
/ b8 o4 ]9 {# S% Z# p                仅使用一个简单的UPDATE语句有什么问题?
# }- d" N9 c5 x  f& S' F/ @8 {UPDATE dbo.Coupon( R. i) `0 W4 ~1 m% O
SET NoofUses = (SELECT COUNT(*) FROM dbo.CouponUse WHERE Couponid = dbo.Coupon.ID)2 ^" w" [: X  o
这就是所有需要的!没有凌乱和复杂的游标,没有循环,没有RBAR(逐行扫描)处理......只是一个漂亮,简单,干净的基于集合的SQL语句。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则