我是SQL Server 2005中存储过程的新手。假设我们有一个包含以下列的表:Id (GUID)
,UserId (string)
,DayOfYear (int)
,Score (int)
。
我需要一个带有一个输入(inputDayOfYear
)的SP,它使用新的Id
但旧UserId
复制最后一天(inputDayOfYear = 10 =>最后一天DayOfYear = 9)数据Score
,以及当前DayOfYear
(第一个输入参数)到新行。
DayOfYear
与inputDayOfYear
相同。DayOfYear
。如果你向我介绍一些学习SP的好资源,我将不胜感激。
答案 0 :(得分:1)
这个MSDN页面是我在学习和探索T-SQL和存储过程时发现的最有用的资源。
答案 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 */