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

时间:2015-05-12 05:27:41

标签: sql-server csv stored-procedures

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

   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我将值插入临时表,将订单值添加为位置。当我使用Orderby Position时,它只在内部选择中实现。但输出作为表中的顺序给出。我知道在外部select语句中使用orderby但我不知道执行它的正确语法。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

如何使用INNER JOIN

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

答案 1 :(得分:0)

我相信你应该保证内部职能的位置,如:

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

这是小提琴http://sqlfiddle.com/#!6/a8acc/4