当前位置:首页 > 数据库 > MS SQL Server > SQL SERVER 2008使用CTE转换string到Table

sqlserver2008使用 SQL SERVER 2008使用CTE转换string到Table

2017-01-07 | 来源:网络 | 关键字: sqlserver2008使用 sqlserver2008使用
多少次我们会面临这样的问题:我们需要把一组ID的Array做为参数传给存储过程.在存储过程中能转换成Table后我们会更喜欢使用这种数据.这里我们使用CTE来实现,例如我们有这样的字符串:'1,2,4

多少次我们会面临这样的问题:我们需要把一组ID的Array做为参数传给存储过程.在存储过程中能转换成Table后我们会更喜欢使用这种数据.

这里我们使用CTE来实现,例如我们有这样的字符串:'1,2,4,8',想转成这个table:

4295

T-sql:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Amit Gaur
-- Create date: July 25th 2008
-- Description: Convert a string to a table
-- =============================================
CREATE FUNCTION [dbo].[strToTable]
(
@array varchar(max),
@del char(1)
)
RETURNS
@listTable TABLE
(
item int
)
AS
BEGIN

WITH rep (item,list) AS
(
SELECT SUBSTRING(@array,1,CHARINDEX(@del,@array,1) - 1) as item,
SUBSTRING(@array,CHARINDEX(@del,@array,1) + 1, LEN(@array)) + @del list

UNION ALL

SEWww.Alonely.Com.cnLECT SUBSTRING(list,1,CHARINDEX(@del,list,1) - 1) as item,
SUBSTRING(list,CHARINDEX(@del,list,1) + 1, LEN(list)) list
FROM rep
WHERE LEN(rep.list) > 0
)
INSERT INTO @listTable
SELECT item FROM rep

RETURN
END

GO

如何调用呢:

1: DECLARE @array VARCHAR(max)
2: SET @array = '1,2,4,8'
3: SELECT item FROM strToTable(@array,',')

完了,实际以前你可以用function递归来实现,这里我们使用CTE.希望这篇POST对您有帮助.

转自:http://wintersun.cnblogs.com

评论

评论数10

表情
发表评论
网友评论仅供其表达个人看法,并不表明网易立场。
《SQL SERVER 2008使用CTE转换string到Table》更多评论

阅读下一篇

查询数据库指定字段重复项的一条数据

网(LieHuo.Net)教程 如何SQL SERVER 查询数据库指定字段重复项的一条数据,今天小编在博客园看到该问题的实例命令代码,现在特别转载了分享给各位访客,希望对您有所帮助。 ... 查看全文

返回MS SQL Server 返回网站首页