BizTalk Mapper 不支持 XSLT 2.0(请参阅 MSDN 文档http://msdn.microsoft.com/en-us/library/aa559261(BTS.10).aspx),因此您需要使用 EXSLT 扩展使用映射器。
Richard Hallgren在这里发表了一篇很棒的文章,其中介绍了如何在 BizTalk Mapper 中使用 EXSLT。
另一个想法是关于替代解决方案。目前尚不清楚您是否绝对必须一个一个地调用您的数据库 - 进行一次调用会起作用吗?
可以为存储过程提供一个分隔字符串作为参数,然后使用一个函数来分解这个字符串。我在下面包含了一个这样的函数的例子,这个例子是一个表函数。您将能够在网络上找到许多其他实现。
使用 table 函数,您可以在存储查找过程中加入反对这一点。
如果这满足您的需求,它应该会快很多,因为您现在只执行一次数据库命中,并且可以执行集合操作来取回您的商店列表。
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