11

データベースに2つのテーブルがあります

クーポンテーブル

  • id(int)
  • 名前(nvarchar(max))
  • NoofUses(int)

CouponUseテーブル

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

ユーザーがクーポンをクリックするたびに、CouponUseそのクーポンのIDを含むテーブルにエントリが入ります

couponこれで、テーブルに。という列ができましたNoofUsescouponuseテーブルをループして1つのクーポンにいくつの行があるかを確認し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

しかし、カーソルを使用してストアドプロシージャにそれを実装する方法がわかりませんか?

質問について質問することは何でもありがたいです、ありがとう

4

3 に答える 3

15

次のスニペットを試してください。アプリケーションから以下のストアド プロシージャを呼び出してNoOfUses、クーポン テーブルが更新されるようにすることができます。

CREATE PROCEDURE [dbo].[sp_UpdateCouponCount]
AS

Declare     @couponCount int,
            @CouponName nvarchar(50),
            @couponIdFromQuery int


Declare curP cursor For

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

OPEN curP 
Fetch Next From curP Into @couponCount, @CouponName,@couponIdFromQuery

While @@Fetch_Status = 0 Begin

    print @couponCount
    print @CouponName

    update Coupon SET NoofUses=@couponCount
    where couponuse.id=@couponIdFromQuery


Fetch Next From curP Into @couponCount, @CouponName,@couponIdFromQuery

End -- End of Fetch

Close curP
Deallocate curP

お役に立てれば!

于 2012-11-22T07:14:09.183 に答える
12

UPDATE単一の単純なステートメントを単に使用することの何が問題になっていますか??

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

それだけです!乱雑で複雑なカーソル、ループ、RBAR (行ごとのアゴナイジング) 処理はありません。単純でクリーンなセットベースの SQL ステートメントです。

于 2012-11-22T08:06:04.213 に答える
0

テーブル で使用されるたび NoofUsesにテーブルの列を更新するトリガーを作成できますCouponcouponidCouponUse

クエリ:

CREATE TRIGGER [dbo].[couponcount] ON [dbo].[couponuse]
FOR INSERT
AS
if EXISTS (SELECT 1 FROM Inserted)
  BEGIN
UPDATE dbo.Coupon
SET NoofUses = (SELECT COUNT(*) FROM dbo.CouponUse WHERE Couponid = dbo.Coupon.ID)
end 
于 2017-08-10T05:48:38.950 に答える