0

where inSQL Server 2008 中的语句可以使用通配符吗?

例如,我目前有:

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-________','_______-________')

我将通过存储过程将这些值作为逗号分隔列表传递。还有其他方法可以完成吗?

4

4 回答 4

1

获取您的逗号分隔列表,将其拆分,然后将其插入临时表中......

然后,您可以在此临时表中使用LIKE语句:JOIN

SELECT something
FROM myTable mt
JOIN #tempTable tt
    ON mt.ORG + '-' + mt.ORGSUB LIKE tt.SearchValue
于 2013-01-28T19:10:42.550 回答
1

为什么你甚至关心ORGSUB你的查询(如示例中提供的)?在我看来,您应该重写您的WHERE子句以单独查找组件,例如:

SELECT something  
FROM myTable  
WHERE ORG IN (5015001, 5015018, ...) 
[add other criteria as appropriate]
于 2013-01-28T19:10:51.677 回答
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

现在,您可以将集合从 C# 或任何地方传递到存储过程中,而无需先将其形成逗号分隔的列表。

于 2013-01-28T19:16:01.767 回答
0

您可以创建一个包含split函数结果的临时表。

SELECT somthing 
from myTable  
    JOIN dbo.Split('5015001-________','5015018-________','_______-________') as Splits 
    on (ORG + '-' + ORGSUB) like Splits.items
于 2013-01-28T19:15:55.970 回答