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
exec sp_executesql @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)
exec sp_executesql @Sql
END
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
在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系统表中抽取索引的列表,然后列举每个索引中的字段,并判断这个字段是否按照升序或者降序进行排序。