我有一个使用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但我不知道执行它的正确语法。任何人都可以帮助我吗?
答案 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