如何进行以下操作?
我使用以下查询来获取特定用户标签ID:
select id
from intranet.dbo.tabs
where cms_initials = @user
order by id asc
可能会返回以下ID
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
但是使用第一个查询中的ID来替换选项卡ID
所以,如果第二个查询最初将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
但这只是按原样复制所有内容,我需要这样做,但要替换复制行中的ID。
答案 0 :(得分:1)
此解决方案使用common table expressions和ranking functions。 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