结合fn_split函数,我将根据逗号分隔值从表中返回结果列表。
存储过程T-SQL如下:
SELECT ProductCode, ProductDesc, ImageAsset, PriceEuros, PriceGBP, PriceDollars,
replace([FileName],' ','\_') as [filename],
ID as FileID, weight
from Products
LEFT OUTER JOIN Assets on Assets.ID = Products.ImageAsset
where ProductCode COLLATE DATABASE_DEFAULT IN
(select [value] from fn\_split(@txt,','))
and showOnWeb = 1
我传入以下的@txt参数(例如):
ABC001,ABC009,ABC098,ABC877,ABC723
这一切都运行正常,但结果不会以任何特定顺序返回 - 我需要以“相同顺序”作为输入参数返回的产品。
不幸的是,这是一个带有内置架构的实时网站,因此我无法对其进行任何更改(但我希望可以) - 否则我会让它变得更加明智。
答案 0 :(得分:5)
如果在@txt参数上传递的所有引用都是唯一的,您可以使用CharIndex来查找它们在param中的位置,例如。
order by charindex(ProductCode, @txt)
答案 1 :(得分:1)
在存储过程中,我将创建一个具有数字键的表,该数字键是临时表的PK并设置为自动递增。然后,我会将fn_split的结果插入到该表中,这样您就可以在列表中按顺序排列参数(自动增量将处理这些参数)。
然后,将结果集连接到此临时表,按数字键排序。
如果参数列表中的条目不是唯一的,那么在将记录插入临时表后,我会删除任何重复项,除了id是该特定参数的最小值的记录。