有时, 需要合并,拆分文本,其实,方法很多.
以下,合并使用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 手动创建成功.