Tsql SQL如何循环表并合并结果?
我正在尝试这样做:Tsql SQL如何循环表并合并结果?,tsql,Tsql,我正在尝试这样做: while @nrOfAuthlevels >= @myAuthLevel begin set @myAuthLevel = @myAuthLevel + 1 SELECT Role.name, Role.authorityLevel FROM [dbo].[Role] ORDER BY Role.authorityLevel end 此存储过程的结果将是一个表,其中所有Role.authorityLevel都
while @nrOfAuthlevels >= @myAuthLevel
begin
set @myAuthLevel = @myAuthLevel + 1
SELECT Role.name, Role.authorityLevel
FROM [dbo].[Role]
ORDER BY Role.authorityLevel
end
此存储过程的结果将是一个表,其中所有Role.authorityLevel都低于我自己的级别。但这会生成几个表
提前谢谢
溴
Christoffer在循环之前创建临时表,不选择数据,而是将数据插入此临时表:
create table #tmp (
Name type,
authorityLevel type
)
while @nrOfAuthlevels >= @myAuthLevel
begin
set @myAuthLevel = @myAuthLevel + 1
insert into #tmp values(
SELECT Role.name, Role.authorityLevel
FROM [dbo].[Role]
where ...
)
end
如果希望保持当前结构,则需要为while循环中的每个步骤插入临时表,并且在临时表返回的外部插入 也就是说,为什么不使用WHERE子句来获得预期的回报结果:
SELECT Role.Name, Role.AuthorityLevel
FROM dbo.Role
WHERE Role.AuthorityLevel < @MyAuthLevel
ORDER BY Role.AuthorityLevel
选择Role.Name、Role.AuthorityLevel
来自dbo.Role
其中Role.AuthorityLevel<@MyAuthLevel
按角色排序。AuthorityLevel
你是对的,我认为其中还有更多内容,因为最初的选择忽略了where子句。我把它看作是一个示例或伪代码,你不能把sql看作是一种过程语言。你不会告诉Sql如何得到你想要的(先做A,然后做B,然后返回C),你会告诉它你想要得到什么(我希望记录是这样的,但不是那样的)。Sql循环表明你不是在集中思考,Sql是在集中思考(这大概也是威尔所说的)。