2015-10-16 20 views
0

我运行一个CLR C#进行级联从类似的例子在网上获得的值,并在这里定义的书: https://dotnetfiddle.net/aKOC5Q 和我一起上不同的值CLR SqlUserDefinedAggregate CONCAT多次运行

SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit 

把它在C#代码,你可以看到我正在使用Distinct(),因为我不想重复。这里 的问题是,显然这CLR被多次调用,因此我得到重复的结果为每例如:

PalestinePalestine,IsraelPalestine,Israel,Spain 

按照C#的逻辑,这不应该发生,但你可以看到的缺失昏迷这些值使我明白CLR被多次调用(除了MERGE),因此我得到了重复的结果。

有趣的是,如果在C#拨弄线40我写:

AccumulatorList.Add("test"); 

我得到的,正确的,一个结果 “测试”。

你知不知道为什么会出现这个问题,我该如何摆脱它并获得不同的值?

回答

0

显然我是对的嗅了并发问题并运行相同的查询与MAXDOP 1选项

SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit OPTION(MAXDOP 1) 

修复问题