是否可以在SQL Server 2008中为where in
语句使用通配符?
例如,我目前有:
SELECT something
FROM myTable
WHERE (ORG + '-' + ORGSUB like '5015001-________' or
ORG + '-' + ORGSUB like '5015018-________' or
ORG + '-' + ORGSUB like '_______-________')
我需要这样做:
SELECT something
FROM myTable
WHERE
(ORG + '-' + ORGSUB) in( '5015001-________','5015018-________','_______-________')
我将通过存储过程将这些值作为逗号分隔列表传递。是否还有另一种方法可以完成它?
答案 0 :(得分:1)
使用逗号分隔列表,将其拆分,然后将其插入临时表...
然后,您可以在LIKE
中使用JOIN
语句到此临时表:
SELECT something
FROM myTable mt
JOIN #tempTable tt
ON mt.ORG + '-' + mt.ORGSUB LIKE tt.SearchValue
答案 1 :(得分:1)
为什么您甚至关心查询中的ORGSUB
(如示例中所示)?
在我看来,您应该重写WHERE
子句以分别查找组件,例如:
SELECT something
FROM myTable
WHERE ORG IN (5015001, 5015018, ...)
[add other criteria as appropriate]
答案 2 :(得分:1)
为什么以逗号分隔的列表?
DECLARE TYPE dbo.OrgSub AS TABLE(s VARCHAR(32));
GO
CREATE PROCEDURE dbo.SearchOrgSubs
@OrgSub dbo.OrgSub READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT t.something
FROM dbo.mytable AS t
INNER JOIN @OrgSub AS o
ON t.ORG + '-' + t.ORGSUB = o.s;
END
GO
现在,您可以将 set 从C#或任何地方传递到存储过程中,而无需先将其形成逗号分隔列表。
答案 3 :(得分:0)
您可以创建临时表包含split
函数的结果。
SELECT somthing
from myTable
JOIN dbo.Split('5015001-________','5015018-________','_______-________') as Splits
on (ORG + '-' + ORGSUB) like Splits.items