我有一个ASP.NET应用程序需要使用列表和范围搜索VARCHAR(20)列。换句话说,该输入可以是这样的:搜索列表,范围
ABC,444,CD-EF,90-BA,HIJ
,结果需要是相当于:
SELECT * FROM table
WHERE
Col1 = 'ABC' OR
Col1 = '444' OR
Col1 BETWEEN 'CD' AND 'EF' OR
Col1 BETWEEN '90' AND 'BA' OR
Col1 = 'HIJ'
常规SQL列的排序顺序是针对范围是可接受的。这里涉及两个主要部分:
- 将参数从.NET发送到存储过程。
- 使用SP中的参数进行搜索。
我已经考虑一些选择,这不是相互排斥的:
- 的是,我可以发送字符串。没有
array[] = SPLIT(',', @query)
或类似的,所以解析将是低水平的。我宁愿在.NET端解析。 - 在.NET端,转换为XML,在SP中转换为表。
- 使用游标浏览已经在表中的参数,执行单独的查询并合并结果。
- 创建动态where子句(SQL上侧的1号,或.NET的一侧)
动态在.NET端SQL似乎“易”的出路,但我不相信这是最好的。有什么想法吗?
我最终这样做了。保持它的服务器端增加了一点可重用性,但这项工作的价值可以忽略不计。 – 2010-08-25 19:41:48