当前位置:首页 > 数据库 > 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》更多评论

阅读下一篇

SQL Server教程:Replication 创建技巧

SQLServer的Replication技术从2005开始,已经变得非常成熟了,而且效果也很好,很多的公司在做读写分离时,都选择了这项技术;Replication现在包括事务、合并和快照三种,每项都 ... 查看全文

返回MS SQL Server 返回网站首页