SQL查询使用fn_Split在列中查找多个值

时间:2014-06-14 00:39:18

标签: sql sql-server

这是我earlier question的后续跟踪,让我了解了目标。

以下是我的开始:

SELECT * FROM MyTable WHERE County IN (SELECT value From dbo.fn_Split(@counties, ','))

这是场景:在我的表中,我有一个名为County的列。每条记录可以在县列中用逗号分隔多个县(我知道这是不好的形式,我没有这样做)。例如:county1,county22,county41。有些记录可能只有一个县(比如县13),其他县可能有所有县。所以:county1,count2,county3 ......通过county45(是的,很可怕,我知道)。

在我尝试构建的应用程序中,用户可以选择多个县甚至所有县,其格式与上面相同(county1,county2,county3 ...)。感谢Martin在上一个问题中的帮助,我可以让它返回每个县的记录,但不包括可能包含所有县的记录。

例如:用户选择county4,county26。我需要返回只有county4和county26的记录,以及任何可能包含它们作为更大集合的一部分的记录(就像所有45个一样)。

希望这很明确,我没有让它比必要的更复杂。非常非常非常感谢任何帮助!

举例说明:

        County
Record1 county1, county14, county26
Record2 county14
Record3 county1, county2, ... through county45

User Submission: county1, county26

Returns:    Record1 and Record3

1 个答案:

答案 0 :(得分:1)

不确定我是否理解了这个问题,但这是我如何理解它:
您需要从表中返回一个或多个所选项目的行。
此外,您希望能够一次选择所有项目而不传递整个列表。

我使用带有2个参数的存储过程来做到这一点:
@Selection SMALLINT @TVP_County CountyTableType(表值变量。见:https://msdn.microsoft.com/en-us/library/bb510489.aspx

如果@Selection = 1,那么您将@TVP_County加入您的桌子以获得结果 如果@Selection = 0,则返回表格中没有加入的所有记录,并且根本不使用@TVP_County。
如果@Selection = -1,则从表中排除@TVP_County项。在这种情况下,您将能够进行反向标记。用户将能够选择他/她不想看到的几个县。

原因是,在存储过程中,您必须实现逻辑以根据第一个参数运行三个不同的查询。