2009-11-26 133 views
1

我是SQL Server 2005中存储过程的新手。假设我们有一个包含以下列的表:,UserId (string),DayOfYear (int),Score (int)我需要帮助在SQL Server 2005中编写存储过程

我需要一个SP具有一个输入(inputDayOfYear),其最后一天复制(inputDayOfYear = 10 =>最后一天DAYOFYEAR = 9)以及新的Id但老UserIdScore,和电流DayOfYear(个输入参数)到新的数据行。

  • 一个重要的事情是忽略 那些具有相同inputDayOfYearDayOfYear数据记录。
  • 性能也很重要 这里;每个DayOfYear可能会有超过1000行 。
  • 返回值是 没有必要,但是新行 的数量可以。

我,如果你给我介绍一些好的资源,了解SP可以理解了。

回答

1

如果我明白你的要求正确这应该帮助你

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

谢谢你的快速回复,但我想我忘了告诉你,用户ID为每DAYOFYEAR独特。 在你SP中如果UserOd = 1有DayOfYear = 3会发生什么?! – Babak 2009-11-26 07:45:27

+1

好的,我为你解决了这个规范。看一看。 – 2009-11-26 08:00:31