をデータから列を数える(同上、...、ToatlViews int型)とItemViews(ID、アイテムID、タイムスタンプ)私はすべてのビューを保存ItemViewsテーブルで更新私は2つのテーブルのアイテムを持っている別のテーブルに私のDBで
彼らがサイトに来るときのアイテム。私は時々、Items.ToatlViewsフィールドを更新するストアドプロシージャを呼び出す必要があります。カーソルを使ってこのSPを実行しようとしましたが、更新ステートメントが間違っています。それを修正するのを助けてくれますか?カーソルなしでこれを行うことはできますか?
CREATE PROCEDURE UpdateItemsViews
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @currentItemId int
DECLARE @currentItemCursor CURSOR
SET @currentItemCursor = CURSOR FOR SELECT Id FROM dbo.Items
OPEN @currentItemCursor
FETCH NEXT FROM @currentItemCursor INTO @currentItemId
WHILE @@FETCH_STATUS = 0
BEGIN
Update dbo.Items set TotalViews = count(*)
from dbo.ItemViews where [email protected]
FETCH NEXT FROM @currentItemCursor INTO @currentItemId
END
END
GO
は、私はそれは、誰かがコードを実行し忘れの可能性がないとして、再計算を行うために、手動で何かを実行するよりもよりよい解決策だと思いますSQLを書くときにはカーソルを使わないように努力することをお勧めします。データベースに対して必要なものを書くための 'set'ベースの方法が常に存在するためです。もちろん、このルールには常に例外があります。エレガンスのために –