Публикация

CustomQuery и параметр для вложенного IN(...)

У меня есть CustomQuery с текстом:

declare @TableName varchar(250)

declare tc cursor FOR
SELECT
        s1.[Code] AS [Code]
FROM
        [tbl_Service] AS s1
WHERE s1.[ServiceTypeCode] = 'Table'
AND s1.Code IN (:IncludedTablesString)
ORDER BY 1 ASC

open tc

while (1=1)
begin
  fetch next FROM tc INTO @TableName
  IF @@fetch_status = -1 break
  IF @@fetch_status = -2 continue

print 'Start process ' + @TableName
...
...
...
print @TableName + ' was processed'

end
close tc
deallocate tc

Мне нужно в параметр :IncludedTablesString подставить набор строк - перечень имен таблиц, например

declare tc cursor FOR
SELECT
        s1.[Code] AS [Code]
FROM
        [tbl_Service] AS s1
WHERE s1.[ServiceTypeCode] = 'Table'
AND s1.Code IN ('tbl_Opportunity', 'tbl_Incident')
ORDER BY 1 ASC

список таблиц - входящий параметр переменной длины (от 0 до много))

Долго мучался, в конце концов решил парсить "прямо там":

declare @TableName varchar(250)

-- для парсинга IncludedTablesString start  
declare @IncludedTablesStringTable TABLE (Code nvarchar(4000))
declare @input_str nvarchar(4000) = :IncludedTablesString
declare @delimeter nvarchar(1) = ','
declare @pos int = charindex(@delimeter,@input_str)
declare @IncludedTablesStringCode nvarchar(4000)

while (@pos != 0)
begin
    SET @IncludedTablesStringCode = SUBSTRING(@input_str, 1, @pos-1)
    INSERT INTO @TABLE (Code) VALUES(@IncludedTablesStringCode)
    SET @input_str = SUBSTRING(@input_str, @pos+1, LEN(@input_str))
    SET @pos = CHARINDEX(@delimeter,@input_str)
    print @pos
end
-- для парсинга IncludedTablesString end

declare tc cursor FOR
SELECT
        s1.[Code] AS [Code]
FROM
        [tbl_Service] AS s1
WHERE s1.[ServiceTypeCode] = 'Table'
AND s1.Code IN (SELECT Code FROM @IncludedTablesStringTable)
ORDER BY 1 ASC

строка должна быть вида('значение,значение2,значение3,' без пробелов - а то тоже попадут и с запятой (или другим разделителем) на конце.

Есть у кого-нибудь другие варианты, кроме запуска запроса в цикле для каждого значения отдельно?

Нравится

Поделиться

3 комментария

Дмитрий, ваш пост стал 10 000 на нашем community. В честь этого хотим наградить Вас праздничным сертификатом :).
certificate

:lol:
почти 23 килобайта безудержной радости!
:lol:

Показать все комментарии