Как реализовать функцию массовой вставки в Sql Server 2005 - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть таблица в базе данных с именем user, в которой есть следующие записи.

Userid FirstName LastName
1          fa      la
2          fb      lb
3          fc      lc

и другая таблица userform

Userformid Userid  Form   Code modifieddate  Isclosed   IsForm 
1             1     ff     cc     somedate     0           0
2             1     gg     rr     somedate     0           0
3             1     bb     bb     somedate     0           0
4             2     ss     aa     somedate     0           0
5             2     qq     sa     somedate     0           0
6             3     ws     xc     somedate     0           0

Теперь мне нужно вставить новую запись для каждого идентификатора пользователя в userformТаблица и только столбец «Форма и код» должны копироваться во вставленную строку из таблицы пользовательской формы только по последней измененной дате (что-то вроде: - порядок по измененной дате).

Output should be in userform table :
    Userformid Userid  Form   Code modifieddate  Isclosed   IsForm 
    1             1     ff     cc     somedate     0           0
    2             1     gg     rr     somedate     0           0
    3             1     bb     bb     somedate     0           0
    4             2     ss     aa     somedate     0           0
    5             2     qq     sa     somedate     0           0
    6             3     ws     xc     somedate     0           0
newly added row
    7             1     bb     bb     newdate     0           0
    8             2     qq     sa     newdate     0           0
    9             3     ws     xc     newdate     0           0

В таблице пользователя и таблице пользовательской формы имеется 6000 записей.

Как этого добиться, используя функцию массовой вставки ИЛИ используя любые другие методы в SQL Server 2005. Я не хочу использовать CURSOR.

1 Ответ

1 голос
/ 21 декабря 2010

Примерно так: использование ROW_NUMBER должно сработать.Попробуйте сначала без INSERT, чтобы проверить результаты, которые он возвращает.Если это то, что вы хотите, просто раскомментируйте строку INSERT и продолжайте.

DECLARE @NewDate DATETIME
SET @NewDate = GETDATE()

--INSERT UserForm (UserId, Form, Code, modifieddate, IsClosed, IsForm)
SELECT UserId, Form, Code, @NewDate, IsClosed, IsForm
FROM
(
    SELECT ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY modifieddate DESC) AS RowNo, 
        UserId, Form, Code, IsClosed, IsForm
    FROM UserForm 
) x
WHERE RowNo = 1
...