oCc*_*ing 5 sql-server user-defined-functions string-aggregation
我尝试创建一个通用函数,可以像在 SQL Server 2017 上使用新的 string_agg 内置函数的示例一样使用
内部实现可以类似于以下内容
with tbl as(
select a.Id, c.Desc
from TableA a
join TableB b on b.aId = a.Id
join TableC c on c.Code = b.bCode
)
select distinct ID
, STUFF(( select ', ' + Desc from tbl t where t.ID = tbl.ID
for xml path(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'') Desc
from tbl
Run Code Online (Sandbox Code Playgroud)
但是如何接收字段键、要连接的字段、分隔符和范围选择上下文呢?Inline与或Multi-Statement Table-Valued Functions相关吗?
好的..因此,随着 @Micha\xc5\x82Turczyn 的第一条评论,我遇到了这篇关于CLR 用户定义聚合 - 调用函数的Microsoft 文章
\n\n将代码编译到 SrAggFunc.dll 后,我尝试在 SQL Server 中注册聚合,如下所示:
\n\nCREATE ASSEMBLY [STR_AGG] FROM \'C:\\tmp\\STR_AGG.dll\'; \nGO\nRun Code Online (Sandbox Code Playgroud)\n\n但我收到以下错误。
\n\n\n\n\nMsg 6501,Level 16,State 7,Line 1
\n
\n CREATE ASSEMBLY 失败,因为无法打开物理文件 \'C:\\tmp\\SrAggFunc.dll\': 3(系统找不到指定的路径。) 。
所以我使用了@SanderRijken代码的这个优秀部分,然后将命令更改为
\n\nCREATE ASSEMBLY [STR_AGG] \nFROM 0x4D5A90000300000004000000FF......000; --from GetHexString function\nGO\nRun Code Online (Sandbox Code Playgroud)\n\n进而,
\n\nCREATE AGGREGATE [STR_AGG] (@input nvarchar(200)) RETURNS nvarchar(max) \nEXTERNAL NAME [STR_AGG].C_STRING_AGG;`\nRun Code Online (Sandbox Code Playgroud)\n\n现在已经完成了。
\n\n您可以在 SSMS 上的数据库 -> 可编程性下看到它
\n\n\n\n并使用如下:
\n\nSELECT a.Id, [dbo].[STR_AGG](c.Desc) cDesc\nFROM TableA a\nJOIN TableB b on b.aId = a.Id\nJOIN TableC c on c.Code = b.bCode \nGROUP BY a.Id\nRun Code Online (Sandbox Code Playgroud)\n\n谢谢大家 =)
\n| 归档时间: |
|
| 查看次数: |
9728 次 |
| 最近记录: |