BizTalk Mapper не поддерживает XSLT 2.0 (см. Документацию MSDN http://msdn.microsoft.com/en-us/library/aa559261(BTS.10).aspx), поэтому вам нужно будет использовать расширения EXSLT, если вы хотите использовать маппер.
Здесь есть отличный пост здесь Ричарда Халлгрена, в котором рассказывается, как использовать EXSLT в BizTalk Mapper.
Еще одна мысль об альтернативном решении. Не ясно, нужно ли вам совершать вызовы из базы данных один за другим - сработает ли один вызов?
Можно предоставить хранимой процедуре строку с разделителями в качестве параметра и затем использовать функцию, чтобы разбить эту строку. Я включил пример такой функции ниже, примером является табличная функция. Вы сможете найти множество других реализаций в Интернете.
С помощью табличной функции вы можете присоединиться к этой процедуре поиска в магазине.
Если это соответствует вашим потребностям, это должно быть намного быстрее, так как теперь вы выполняете всего одно попадание в базу данных и можете выполнять операции над множествами, чтобы получить обратно список магазинов.
CREATE function fn_ParseCSVString
(
@INPUTCSV varchar(MAX)
)
RETURNS @TBL TABLE
(
COL1 INT
)
AS
BEGIN
DECLARE @NUM_STR NVARCHAR(MAX)
SET @NUM_STR = @INPUTCSV
SET @NUM_STR = REPLACE(@NUM_STR,' ','')
-- this will trim any intermediate spaces
WHILE LEN(@NUM_STR) >= 0
BEGIN
DECLARE @@SUBSTR VARCHAR(100)
IF CHARINDEX(',',@NUM_STR,0) <> 0
BEGIN
SET @@SUBSTR = SUBSTRING(@NUM_STR,0,CHARINDEX(',',@NUM_STR,0))
INSERT INTO @TBL VALUES(@@SUBSTR)
END
ELSE
BEGIN
INSERT INTO @TBL VALUES(@NUM_STR)
BREAK
END
SET @@SUBSTR = @@SUBSTR + ','
SET @NUM_STR = SUBSTRING(@NUM_STR, CHARINDEX(',',@NUM_STR,0) + 1, LEN(@NUM_STR))
END
RETURN
END