CLR SqlUserDefinedAggregate 多次连接不同的值 运行
CLR SqlUserDefinedAggregate concat on distinct values run multiple times
我是 运行 CLR c#,用于连接从在线和此处定义的书籍中的类似示例中获取的值:
https://dotnetfiddle.net/aKOC5Q
我用
来称呼它
SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit
在 C# 代码中,您可以看到我正在使用 Distinct(),因为我不想重复。
这里的问题是,显然这个 CLR 被调用了多次,因此我按照示例得到了重复的结果:
PalestinePalestine,IsraelPalestine,Israel,Spain
根据 c# 逻辑,这不应该发生,但是正如您所见,值之间缺少的逗号让我明白 CLR 被多次调用(除了 MERGE),因此我得到了重复的结果.
有趣的是,如果在 c# fiddle 的第 40 行我写:
AccumulatorList.Add("test");
我正确地得到了一个结果 "test"。
你知道为什么会出现这个问题吗?我怎样才能摆脱它并获得不同的值?
显然我在嗅探并发问题和 运行 使用 MAXDOP 1 选项的相同查询方面是正确的
SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit OPTION(MAXDOP 1)
解决问题
我是 运行 CLR c#,用于连接从在线和此处定义的书籍中的类似示例中获取的值: https://dotnetfiddle.net/aKOC5Q 我用
来称呼它 SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit
在 C# 代码中,您可以看到我正在使用 Distinct(),因为我不想重复。 这里的问题是,显然这个 CLR 被调用了多次,因此我按照示例得到了重复的结果:
PalestinePalestine,IsraelPalestine,Israel,Spain
根据 c# 逻辑,这不应该发生,但是正如您所见,值之间缺少的逗号让我明白 CLR 被多次调用(除了 MERGE),因此我得到了重复的结果.
有趣的是,如果在 c# fiddle 的第 40 行我写:
AccumulatorList.Add("test");
我正确地得到了一个结果 "test"。
你知道为什么会出现这个问题吗?我怎样才能摆脱它并获得不同的值?
显然我在嗅探并发问题和 运行 使用 MAXDOP 1 选项的相同查询方面是正确的
SELECT unit,dbo.concat(COUNTRY,',') FROM dbo.COUNTRIES GROUP BY unit OPTION(MAXDOP 1)
解决问题