Копирование существующих строк в таблице - PullRequest
1 голос
/ 17 июня 2011

Как мне поступить следующим образом?

Я использую следующий запрос для получения идентификаторов вкладок определенных пользователей:

select id
from intranet.dbo.tabs
where cms_initials = @user
order by id asc

, который может вернуть следующие идентификаторы

4
5
6
7

Теперь я хочу вставить строки из следующего запроса:

select tabs_id, widgets_id, sort_column, sort_row
from intranet.dbo.columns c
inner join intranet.dbo.tabs t on c.tabs_id = t.id
where t.is_default = 1

Но используйте идентификаторы из первого запроса, чтобы заменить идентификаторы табуляции

, поэтому, если второй запрос первоначально возвращает tabs_id как

0
0
0
0
1
1
1
2
2
2
3
3

Я должен закончить с

0
0
0
0
1
1
1
2
2
2
3
3
4
4
4
4
5
5
5
6
6
6
7
7

Возможно ли это с SQL Server 2005 без использования хранимых процедур?

Пока у меня есть

insert into intranet.dbo.columns ( tabs_id, widgets_id, sort_column, sort_row )
select tabs_id, widgets_id, sort_column, sort_row
    from intranet.dbo.columns c
    inner join intranet.dbo.tabs t on c.tabs_id = t.id
    where t.is_default = 1

Но это просто копирует все как есть, мне нужно это сделать, но заменить идентификаторы в скопированных строках.

1 Ответ

1 голос
/ 17 июня 2011

В этом решении используются общие табличные выражения и функции ранжирования .A и B - ваши исходные запросы, отсортированные по порядку табуляцииЗатем A и B объединяются путем ранжирования и вставляются.

USE intranet

;WITH A AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY id) AS tab_ranking
        , id
    FROM dbo.tabs
    WHERE cms_initials = @user
),
B AS
(
    SELECT DENSE_RANK() OVER (ORDER BY tabs_id) AS tab_sequence
        , tabs_id, widgets_id, sort_column, sort_row
    FROM dbo.columns
    WHERE tabs_id IN (SELECT t.id FROM dbo.tabs t WHERE t.is_default = 1)
)
INSERT INTO dbo.columns (tabs_id, widgets_id, sort_column, sort_row)
SELECT a.id, b.widgets_id, b.sort_column, b.sort_row
FROM A
INNER JOIN B ON B.tab_ranking = A.tab_ranking
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...