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

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

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

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

參考示例如下:

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

-- Author: LzmTW

-- Create date: 20080102

-- Description: 連接子字符串

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

-- @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ù)所在的表的名稱

-- @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的前兩個字符為參考鍵值,合并title到一個臨時表中

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

--對臨時表NewValues的值進行分拆

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

@TableName = '##Table'

,@KeyColName = '[keyCol]'

,@SpliteColName = '[NewValues]'

,@Quote = ','

--刪除臨時表

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 行受影響)

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 亚洲二三区 | 世界一级毛片 | 亚洲色视频在线播放网站 | 美女张开腿黄网站免费国产 | 日韩性色 | 中文字幕高清在线天堂网 | 欧美一级毛片香蕉网 | 国产欧美在线观看 | 在线综合+亚洲+欧美中文字幕 | 欧美成人私人视频88在线观看 | 日本一在线中文字幕天堂 | 一级欧美过瘾大片 | 午夜日韩视频 | 国产精品自在欧美一区 | 成人的天堂| 亚洲成人一区 | 沈樵在线观看福利 | 亚洲欧美视频在线 | 91精品成人免费国产片 | 99在线热视频 | 香蕉视频在线观看黄 | 久久久久久久国产 | 国产一级aaaaa毛片欧美 | 亚洲精品高清国产一久久 | 九九国产精品九九 | 日韩精品中文字幕在线观看 | 一区二区三区在线免费视频 | 一区在线免费 | 亚洲高清免费 | 欧美国产日本 | 久久久免费观成人影院 | 日韩一级欧美一级在线观看 | 亚洲男人天堂2017 | 亚洲人成网站在线观看播放 | 亚洲一区二区欧美 | 国产成人亚洲日本精品 | 久久久久成人精品一区二区 | 黄www片| 亚洲人成人毛片无遮挡 | 香蕉视频1024 | 亚洲高清视频在线播放 |