Nombre de mise à jour de la colonne à partir des données d'une autre table

Dans ma DB j'ai deux tables Articles(Id, ..., ToatlViews int) et ItemViews (id, ItemId, Timestamp)

Dans ItemViews tableau I de stocker tous les points de vue de l'un des éléments comme ils viennent sur le site. De temps à autre, je veux appeler une procédure stockée pour mettre à jour des Éléments.ToatlViews champ. J'ai essayé de faire cette SP à l'aide d'un curseur ... mais la mise à jour énoncé est faux. Pouvez-vous m'aider à le corriger? Puis-je le faire sans curseur?

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 ItemId=@currentItemId
        FETCH NEXT FROM @currentItemCursor INTO @currentItemId
    END   
END
GO
  • Je vous recommande de faire un effort pour ne pas utiliser des curseurs lors de l'écriture de SQL, car il y aura toujours un set basé sur la façon d'écrire ce que vous voulez sur la base de données. Bien sûr, il y aura toujours une exception à cette règle.
InformationsquelleAutor Radu D | 2012-05-22