有时, 需要合并,拆分文本,其实,方法很多.
以下,合并使用apply,拆分使用clr函数,用一个cte体现:
use AdventureWorksDW2008R2
go
with t(id,name) as (
select c.ProductCategoryKey, b.name
from dbo.DimProductCategory c
cross apply(
select ','+CONVERT(nvarchar(20),s.EnglishProductSubcategoryName)
from dbo.DimProductSubcategory s
where c.ProductCategoryKey=s.ProductCategoryKey
order by
s.EnglishProductSubcategoryName
for xml path (''),type
) a(n)
cross apply(
select STUFF(a.n.value('./text()[1]','nvarchar(max)')
,1,1,'')
) b(name)
)
select t.id,name,pos,element from t
cross apply CLRUtilities.dbo.SplitCLR(name,',')
结果如下:
看以下执行计划:
clr函数要快于xml,udf.
提示:
需要注意的是,使用vs2010自动创建和部署clr到sql server,没有成功,主要问题是,创建assemblies可以, 创建函数错误,'cannot find type ?? in assemblies ??',
试验namespace,[]等方法,没有解决.最后, sql server 手动创建成功.