Мне нужна помощь для написания хранимых процедур в SQL Server 2005 - PullRequest
1 голос
/ 26 ноября 2009

Я новичок в хранимых процедурах в SQL Server 2005. Допустим, у нас есть таблица со следующими столбцами: Id (GUID), UserId (string), DayOfYear (int), Score (int).

Мне нужен SP с одним входом (inputDayOfYear), который копирует данные последнего дня (inputDayOfYear = 10 => DayOfYear = 9 последнего дня) с новыми Id, но старыми UserId и Score и текущим DayOfYear (й входной параметр) в новые строки.

  • Одна важная вещь - игнорировать те записи, которые имеют данные DayOfYear То же, что и inputDayOfYear.
  • Производительность также очень важна Вот; может быть более 1000 строк за каждый DayOfYear.
  • Возвращаемое значение не обязательно, но количество новых строк было бы хорошо.

Буду признателен, если вы познакомите меня с некоторыми полезными ресурсами для изучения SP.

Ответы [ 2 ]

1 голос
/ 26 ноября 2009

Если я правильно понимаю ваш запрос, это должно вам помочь

    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 */
1 голос
/ 26 ноября 2009

Эта страница MSDN была самым полезным ресурсом для изучения и изучения T-SQL и хранимых процедур.

Справочная страница MSDN T-SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...