我需要帮助在SQL Server 2005中编写存储过程

时间:2009-11-26 07:25:47

标签: sql-server-2005 stored-procedures

我是SQL Server 2005中存储过程的新手。假设我们有一个包含以下列的表:Id (GUID)UserId (string)DayOfYear (int)Score (int)

我需要一个带有一个输入(inputDayOfYear)的SP,它使用新的Id但旧UserId复制最后一天(inputDayOfYear = 10 =>最后一天DayOfYear = 9)数据Score,以及当前DayOfYear(第一个输入参数)到新行。

  • 重要的是要忽略 那些有数据的记录 DayOfYearinputDayOfYear相同。
  • 表现也很重要 这里;可能有超过1000行 每个DayOfYear
  • 返回值是 没有必要,但新行数 没关系。

如果你向我介绍一些学习SP的好资源,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

这个MSDN页面是我在学习和探索T-SQL和存储过程时发现的最有用的资源。

MSDN T-SQL Reference page

答案 1 :(得分: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 */
相关问题