use*_*159 0 sql sql-server stored-procedures sql-server-2014 sql-server-2016
我需要返回以逗号分隔的字符串发送到存储过程的记录 - 如下所示:
@PMID = 29573145,24106086,20513766,24326307
Run Code Online (Sandbox Code Playgroud)
我有一个存储过程来拉取记录,如
SELECT
data,
PMID
FROM
[dbo].[ADMIN_Publication_JSON]
WHERE
PMID IN (SELECT DATA FROM dbo.Split(@PMID, ','))
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是返回记录集是随机的,我需要它是精确的,因为我的最终用户可以更改顺序,并且记录需要按顺序显示,这将改变逗号字符串中的顺序.这是可能的还是我需要完全改变我提取数据的方式?谢谢
你可以使用像这样的窗口函数
Select T1.data,
T1.PMID
FROM [dbo].[ADMIN_Publication_JSON] T1 INNER JOIN
(SELECT Data,
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RN
FROM dbo.Split(@PMID,',')
) T2 ON T1.PMID = T2.Data
ORDER BY T2.RN;
Run Code Online (Sandbox Code Playgroud)
这是一个小样本:
CREATE TABLE T(
ID INT,
SomeValue VARCHAR(45)
);
INSERT INTO T VALUES
(1, 'One'),
(2, 'Two'),
(3, 'Three'),
(4, 'Four'),
(5, 'Five');
DECLARE @IDs VARCHAR(200) = '3,5,2';
SELECT T.*
FROM T INNER JOIN
(SELECT Value,
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) Seq
FROM STRING_SPLIT(@Ids, ',') --instead of your function
) TT
ON T.ID = TT.Value
ORDER BY TT.Seq;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
93 次 |
最近记录: |