Nel mio DB ho due tavoli Items (Id, ..., ToatlViews int) e ItemViews (id, ItemId, timestamp)Aggiornamento numero di colonne da dati in un'altra tabella
In tabella ItemViews ho memorizzare tutte le viste di un oggetto come vengono al sito. Di tanto in tanto voglio chiamare una stored procedure per aggiornare il campo Items.ToatlViews. Ho provato a fare questo SP usando un cursore ... ma l'istruzione di aggiornamento è sbagliata. Puoi aiutarmi a correggerlo? Posso farlo senza cursore?
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
Vi raccomando di fare ogni sforzo per non usare i cursori quando scrivete SQL, poiché ci sarà sempre un modo basato su 'set' per scrivere ciò che volete contro il database. Ovviamente ci sarà sempre un'eccezione a questa regola. –