今天写了一个地方用到in了,就是数据库中的一个存储过程,因为要查出来一个题目的知识点的详细树,所以把父节点,子节点都给传进去,后来发现输出顺序不对,调试时发现in里面的顺序没错,但是外面顺序查出来给排序了,不是按照我之前的顺序输出的,经过研究中找到了一个解决办法,源码如下
select NodeTitle from dbo.Qes_KnowledgePoint where KpNodeID in(select line from split(@Nodeid,',')) order BY CHARINDEX(',' + CONVERT(nvarchar, KpNodeID) + ',', ',' + CONVERT(nvarchar, Replace(@Nodeid, ' ','')) + ',')
这个里面select line from split(@Nodeid,',')) 是我写的一个表值函数,用来截取字符的,如果我的这个字段KPNodeID是nvarchar类型的话不用这么麻烦,直接后面order by charindex(‘内容’,kpnodeid),但是现在我这个int类型的数据, 所以必须要用congvert进行一下转换。最后就能得出我的结果