加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL SERVER 2008使用CTE转换string到Table

发布时间:2020-12-12 12:39:09 所属栏目:MsSql教程 来源:网络整理
导读:多少次我们会面临这样的问题:我们需要把一组ID的Array做为参数传给存储过程.在存储过程中能转换成Table后我们会更喜欢使用这种数据. 这里我们使用CTE来实现,例如我们有这样的字符串:'1,2,4,8',想转成这个table: T-sql: SET ANSI_NULLS ON GO SET QUOTED_

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

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

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,1) + 1,LEN(@array)) + @del list

UNION ALL

SELECT SUBSTRING(list,list,
SUBSTRING(list,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,8'
3: SELECT item FROM strToTable(@array,',')

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读