讲解SQL Server2005数据项的分拆与合并(1)

日期: 2008-06-29 作者:Victor 来源:TechTarget中国

SQL Server2005数据项的分拆与合并:


参考示例如下:


— =============================================


— Author: LzmTW


— create date: 20080102


— Description: 连接子字符串


— @TableName: 数据所在的表的名称


— @KeyColName: 连接子字符串所依据的键值所在的列


— @joinColName: 包含要连接的子字符串所在的列


— @Quote: 分隔子字符串


— @where: 选择条件,不包含where


— =============================================


create PROCEDURE [Helper].[joinValue]


@TableName nvarchar(100)


,@KeyColName nvarchar(20)


,@joinColName nvarchar(20)


,@Quote nvarchar(10) = N’,’


,@where nvarchar(max) = NULL


AS


BEGIN


SET NOcount ON;


DECLARE


@SQL nvarchar(max)


IF @where IS NULL


SET @SQL = N’


select *


FROM


(


select DISTINCT KeyCol = @KeyColName


FROM @TableName


)a



ELSE


SET @SQL = N’


select *


FROM


(


select DISTINCT KeyCol = @KeyColName


FROM @TableName


where @where


)a



SET @SQL = @SQL + N’


OUTER APPLY (


select NewValues =


STUFF(


REPLACE(


REPLACE(


REPLACE(


(


select joinCol = @joinColName


FROM @TableName b


where @KeyColName = a.KeyCol


FOR XML RAW


)


, N’’’’, N’’’’)


, N’’, N’’”/>’’, N’’’’)


, 1, LEN(N’’@Quote’’), N’’’’)


) c’



  SET @SQL = REPLACE(@SQL, N’@TableName’, @TableName)


SET @SQL = REPLACE(@SQL, N’@KeyColName’, @KeyColName)


SET @SQL = REPLACE(@SQL, N’@joinColName’, @joinColName)


SET @SQL = REPLACE(@SQL, N’@Quote’, @Quote)


IF NOT @where IS NULL


SET @SQL = REPLACE(@SQL, N’@where’, @where)



–PRINT @SQL


&#101xec sp_&#101xecutesql @SQL


END



GO



— =============================================


— Author: LzmTW


— create date: 20080102


— Description: 分拆字符串


— @TableName: 数据所在的表的名称


— @KeyColName: 分拆为子字符串所依据的键值所在的列


— @SpliteColName: 包含要分拆的字符串所在的列


— @Quote: 分隔子字符串


— @where: 选择条件,不包含where


— =============================================


create PROCEDURE [Helper].[SpliteValues]


@TableName nvarchar(100)


,@KeyColName nvarchar(20)


,@SpliteColName nvarchar(20)


,@Quote nvarchar(10) = N’,’


,@where nvarchar(max) = NULL


AS


BEGIN


SET NOcount ON;


DECLARE


@SQL nvarchar(max)


IF @where IS NULL


SET @SQL = N’


select


KeyCol, NewValue


FROM


(


select


KeyCol = @KeyColName


,SpliteCol = CONVERT(xml, N’’’’ + REPLACE(@SpliteColName, N’’@Quote’’, N’’’’) + N’’’’)


FROM @TableName


) a



ELSE


SET @SQL = N’


select


KeyCol, NewValue


FROM


(


select


KeyCol = @KeyColName


,SpliteCol = CONVERT(xml, N’’’’ + REPLACE(@SpliteColName, N’’@Quote’’, N’’’’) + N’’’’)


FROM @TableName


where @where


) a



SET @SQL = @SQL + N’


OUTER APPLY


(


select NewValue = N.v.value(N’’.’’, ’’nvarchar(max)’’)


FROM SpliteCol.nodes(N’’/root/v’’) N(v)


) b’


SET @SQL = REPLACE(@SQL, N’@TableName’, @TableName)


SET @SQL = REPLACE(@SQL, N’@KeyColName’, @KeyColName)


SET @SQL = REPLACE(@SQL, N’@SpliteColName’, @SpliteColName)


SET @SQL = REPLACE(@SQL, N’@Quote’, @Quote)


IF NOT @where IS NULL


SET @SQL = REPLACE(@SQL, N’@where’, @where)


&#101xec sp_&#101xecutesql @Sql


END

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Victor
Victor

相关推荐

  • 在SQL Server 2005中实现网页传递变量(一)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 在SQL Server 2005中实现网页传递变量(二)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 走进SQL Server 2005:十大安全举措

    随着数据库系统被用作网络应用程序后台存储范围的持续扩大,对安全的关注也就越来越必要。虽然从发展的角度来看,围绕在SQL Server 2005的周围的还有不少的杂音,

  • SQL Server 2005:向系统表说再见

    在不使用任何的文档的情况下,编写一个查询,从SQL Server 2000系统表中抽取索引的列表,然后列举每个索引中的字段,并判断这个字段是否按照升序或者降序进行排序。