如何在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语句。 |
|
|
|
|
|