国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

講解SQL Server2005數(shù)據(jù)項(xiàng)的分拆與合并

瀏覽:6日期:2023-11-05 16:34:24
SQL Server2005數(shù)據(jù)項(xiàng)的分拆與合并:

參考示例如下:

-- =============================================

-- Author: LzmTW

-- Create date: 20080102

-- Description: 連接子字符串

-- @TableName: 數(shù)據(jù)所在的表的名稱(chēng)

-- @KeyColName: 連接子字符串所依據(jù)的鍵值所在的列

-- @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: 數(shù)據(jù)所在的表的名稱(chēng)

-- @KeyColName: 分拆為子字符串所依據(jù)的鍵值所在的列

-- @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

示例:

SET NOCOUNT ON

CREATE TABLE ##Table([keyCol] varchar(3), [NewValues] varchar(max))

--原數(shù)據(jù)

SELECT

[title_id]

,[title]

FROM [pubs].[dbo].[titles]

WHERE [type] LIKE 'p%'

--以title_id的前兩個(gè)字符為參考鍵值,合并title到一個(gè)臨時(shí)表中

INSERT INTO ##Table

EXECUTE [ChineseHoliday].[Helper].[JoinValue]

@TableName = '[pubs].[dbo].[titles]'

,@KeyColName = 'LEFT([title_id], 2)'

,@JoinColName = '''《''+[title] + ''》'''

,@Quote = ','

,@Where = '[type] LIKE ''p%'''

--顯示

SELECT * FROM ##Table

--對(duì)臨時(shí)表NewValues的值進(jìn)行分拆

EXECUTE [ChineseHoliday].[Helper].[SpliteValues]

@TableName = '##Table'

,@KeyColName = '[keyCol]'

,@SpliteColName = '[NewValues]'

,@Quote = ','

--刪除臨時(shí)表

DROP TABLE ##Table

結(jié)果:

title_id title

-------- --------------------------------------------------------------------------------

PC1035 But Is It User Friendly?

PC8888 Secrets of Silicon Valley

PC9999 Net Etiquette

PS1372 Computer Phobic AND Non-Phobic Individuals: Behavior Variations

PS2091 Is Anger the Enemy?

PS2106 Life Without Fear

PS3333 Prolonged Data Deprivation: Four Case Studies

PS7777 Emotional Security: A New Algorithm

keyCol NewValues

------ ------------------------------------------

PC 《But Is It User Friendly?》,《Secrets of Silicon Valley》,《Net Etiquette》

PS 《Computer Phobic AND Non-Phobic Individuals: Behavior Variations》,《Is Anger the Enemy?》,《Life Without Fear》,《Prolonged Data Deprivation: Four Case Studies》,《Emotional Security: A New Algorithm》

KeyCol NewValue

------ ------------------------------------------

PC 《But Is It User Friendly?》

PC 《Secrets of Silicon Valley》

PC 《Net Etiquette》

PS 《Computer Phobic AND Non-Phobic Individuals: Behavior Variations》

PS 《Is Anger the Enemy?》

PS 《Life Without Fear》

PS 《Prolonged Data Deprivation: Four Case Studies》

PS 《Emotional Security: A New Algorithm》

繼續(xù):字符串的分拆

-- =============================================

-- Author: LzmTW

-- Create date: 20080108

-- Description: 拆分字符串

-- =============================================

CREATE FUNCTION [Func].[Splite]

(

@Input nvarchar(max)

,@Quote nvarchar(max)

)

RETURNS

@Table TABLE

(

[ID] int identity(1,1) PRIMARY KEY

,[Value] nvarchar(max)

)

AS

BEGIN

INSERT @Table

SELECT

[Value] = NewValue

FROM

(

SELECT

SpliteCol = CONVERT(

xml

,N'' + REPLACE(

@Input

,@Quote

,N'') + N'')

) a

OUTER APPLY

(

SELECT NewValue = N.v.value(N'.', 'nvarchar(max)')

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

) b

RETURN

END

示例:

定義新行,

CREATE FUNCTION [Const].[NewLine]

(

)

RETURNS nchar(2)

AS

BEGIN

DECLARE @Result nchar(2)

SELECT @Result = char(13) + char(10)

RETURN @Result

END

DECLARE

@Input nvarchar(max)

,@Quote nvarchar(max)

SET @Input = N'90

10

20

30

40

50

60'

SET @Quote = [Const].NewLine()

SELECT * FROM [Func].[Splite] (@Input, @Quote)

結(jié)果

ID Value

----------- ------

1 90

2 10

3 20

4 30

5 40

6 50

7 60

(7 行受影響)

主站蜘蛛池模板: 欧美大片一级特黄 | 国产午夜免费福利红片 | 国产三级一区二区 | 久久久国产精品免费看 | 国产欧美日韩中文久久 | 亚洲精选在线观看 | 欧美成人自拍 | 亚洲第一色网 | 欧美成人视屏 | 欧美视频在线一区二区三区 | 欧美精品xx | 伊人黄网 | 欧美三级做爰全过程 | 国产一级毛片午夜福 | 99视频精品全国在线观看 | 国产三级手机在线 | 日本丶国产丶欧美色综合 | 国产成人精品s8p视频 | 国产精品亚洲高清一区二区 | 中国一级毛片欧美一级毛片 | 72种姿势欧美久久久久大黄蕉 | 三级黄色毛片网站 | 欧美色性视频 | 在线免费观看一区二区三区 | 欧美精品色精品一区二区三区 | 视频二区好吊色永久视频 | 亚洲视频在线一区 | 日本三级久久 | 亚洲视频在线免费看 | 亚洲一区国产 | 亚洲精品免费视频 | 91久久香蕉青青草原娱乐 | 成人观看免费大片在线观看 | 国产一区二区三区影院 | 国内自拍在线观看 | 国产福利社区 | 日韩欧美不卡一区二区三区 | 成人综合网址 | 日韩美女一区 | 欧美一区二区三区视视频 | 亚洲精品午夜 |