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是在集中思考(这大概也是威尔所说的)。