Вопрос по sql-server – SQL как получить компаратор равенства в списке целых

1

Я пишу SQL-запрос следующим образом:

ALTER proc [dbo].[Invoice_GetHomePageInvoices] (
      @AreaIdList varchar(max)
,      @FinancialYearStartDate datetime = null
,      @FinancialYearEndDate datetime = null
) as

    set nocount on

    select *
    from Invoice i
    left outer join Organisation o on i.OrganisationId = o.Id
    left outer join Area a on i.AreaId = a.Id
where i.InvoiceDate BETWEEN @FinancialYearStartDate AND @FinancialYearEndDate

Параметр @AreaIdList будет иметь формат & quot; 1,2,3 & quot; и т.п.

Я хочу добавить строку, которая будет возвращать только счета с идентификатором области, равным любому из идентификаторов в @AreaIdList.

Я знаю, как сделать заявление, если оно было на areaId для поиска, т.е. гдеi.AreaId == areaId проблема в том, что теперь у меня есть список, который я должен сравнить для каждого идентификатора области в @AreaIdList.

Кто-нибудь может сказать мне, как бы вы поступили об этом?

i.AreadID в (@areaIDlist) xQbert
возможный дубликатParameterizing an SQL IN clause? Andriy M

Ваш Ответ

1   ответ
0

where AreadID in (select ID from ...)

ALTER proc [dbo].[Invoice_GetHomePageInvoices] (
       @AreaIdList varchar(max)
,      @FinancialYearStartDate datetime = null
,      @FinancialYearEndDate datetime = null
) as

set nocount on

set @AreaIdList = @AreaIdList+','
declare @T table(ID int primary key)
while len(@AreaIdList) > 1
begin
  insert into @T(ID) values (left(@AreaIdList, charindex(',', @AreaIdList)-1))
  set @AreaIdList = stuff(@AreaIdList, 1, charindex(',', @AreaIdList), '')
end

select *
from Invoice i
  left outer join Organisation o on i.OrganisationId = o.Id
  left outer join Area a on i.AreaId = a.Id
where i.InvoiceDate BETWEEN @FinancialYearStartDate AND @FinancialYearEndDate and
      i.AreadID in (select ID from @T) 

Похожие вопросы