2009-11-26 3 views
1

Je suis un débutant dans les procédures stockées dans SQL Server 2005. Disons que nous avons une table avec ces colonnes: , UserId (string), DayOfYear (int), Score (int).je besoin d'aide pour écrire une procédure stockée dans SQL Server 2005

je besoin d'un SP avec une entrée (inputDayOfYear) qui copie dernier jour (inputDayOfYear = 10 => dernier jour DayOfYear = 9) données avec de nouvelles Id mais vieux UserId et Score, et le courant DayOfYear (e paramètre d'entrée) à nouveau lignes

  • Une chose importante est d'ignorer les enregistrements qui ont des données de DayOfYear mêmes que inputDayOfYear. La performance est également très importante ici; il peut y avoir plus de 1000 lignes pour chaque .
  • La valeur de retour est non nécessaire mais le nombre de nouvelles lignes serait correct.

Je vais être apprécié si vous me présenter à quelques bonnes ressources pour apprendre SP, aussi.

Répondre

1

Si je comprends correctement votre demande cela devrait vous aider à

DECLARE @Table TABLE(
     ID UNIQUEIDENTIFIER, 
     UserID INT, 
     [DayOfYear] INT, 
     Score INT 
) 

INSERT INTO @Table (ID,UserID,DayOfYear,Score) SELECT NEWID(), 1, 1, 10 
INSERT INTO @Table (ID,UserID,DayOfYear,Score) SELECT NEWID(), 2, 1, 100 
INSERT INTO @Table (ID,UserID,DayOfYear,Score) SELECT NEWID(), 2, 2, 1000 
INSERT INTO @Table (ID,UserID,DayOfYear,Score) SELECT NEWID(), 1, 3, 10 

DECLARE @inputDayOfYear INT 
SELECT @inputDayOfYear = 3 

/* THIS GOES INTO SP*/ 
INSERT INTO @Table (ID,UserID,DayOfYear,Score) 
SELECT NEWID(), 
     UserID, 
     @inputDayOfYear, 
     Score 
FROM @Table 
WHERE [DayOfYear] = @inputDayOfYear - 1 
AND  UserID NOT IN (SELECT UserID FROM @Table WHERE [DayOfYear] = @inputDayOfYear) 
/* THIS GOES INTO SP*/ 

SELECT * FROM @Table 

/* SP TO CREATE */ 
CREATE PROCEDURE InsertValues(@inputDayOfYear AS INT) 
AS 
BEGIN 
    INSERT INTO @Table (ID,UserID,DayOfYear,Score) 
    SELECT NEWID(), 
      UserID, 
      @inputDayOfYear, 
      Score 
    FROM @Table 
    WHERE [DayOfYear] = @inputDayOfYear - 1 
AND  UserID NOT IN (SELECT UserID FROM @Table WHERE [DayOfYear] = @inputDayOfYear) 
END 
/* SP TO CREATE */ 
+0

Merci pour votre réponse rapide, mais je crois que j'oublié de vous dire que UserId est unique par DayOfYear. Dans votre SP, que se passera-t-il s'il y avait un DayOfYear = 3 pour UserId = 1 ?! – Babak

+1

OK, j'ai corrigé cette spécification pour vous. Regarde. –

1

Cette page MSDN a été la ressource la plus utile que j'ai trouvée pour apprendre et explorer les procédures T-SQL et stockées.

MSDN T-SQL Reference page

Questions connexes