检索订单中给定的多个 ID 的值

Retrieve values for multiple ids given in the order

我有一个使用 CSV 接受多个 ID 的存储过程。我想按照给定 ID 的顺序从 table 中检索值。我目前使用的存储过程是

   CREATE procedure [dbo].[Proc1]
   @Userid VARCHAR(MAX)=NULL
   as
   begin
   set nocount on;
    DECLARE @Useridord TABLE (Userid VARCHAR(MAX),Position int identity(1,1));
   INSERT INTO @Useridord 
   SELECT item
   FROM [dbo].[Split] (@Userid, ',')
   select * from User where User.UserId IN (select TOP 100 Percent Userid  from @Useridord ORDER BY Position)  
   end
   GO

我想做的是从 csv 中插入值到临时 table 添加订单值作为位置。由于我使用 Orderby Position,它仅在内部 select 中实现。但是输出是按照 table 中的顺序给出的。我知道在外部 select 语句中使用 orderby,但我不知道执行它的正确语法。谁能帮帮我?

使用INNER JOIN怎么样?

SELECT 
    u.* 
FROM User u
INNER JOIN @Useridord uo
    ON uo.Userid = u.UserId
ORDER BY uo.Position

我相信你应该保证函数内的位置,如:

create function fnSplit(@users varchar(100), @del char(10))
returns @t table(userid int, pos int) as
begin
    insert into @t values(3,1),(2,2),(1,3)
    return
end

然后你可以直接加入函数结果,如:

Select u.* from users u
join fnSplit('','') s on u.id = s.userid
order by s.pos

这里是fiddlehttp://sqlfiddle.com/#!6/a8acc/4