• SQLSERVER2008使用CTE转换string到Table


    多少次我们会面临这样的问题:我们需要把一组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
     
            SELECT 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对您有帮助.

    Post of Author: Petter Liu    http://wintersun.cnblogs.com

  • 相关阅读:
    关于web前端网站优化
    C/S与B/S架构的区别和优缺点
    什么是闭包?闭包的优缺点?
    JavaScript中基本数据类型和引用数据类型的区别
    jQuery对象与DOM对象之间的转换方法
    (转)第05节:Fabric.js的动画设置
    (转)第04节:Fabric.js用路径画不规则图形
    layui表单与原生js表单的一些小问题(三)
    layui表单与原生js表单的一些小问题(二)
    layui表单与原生js表单的一些小问题(一)
  • 原文地址:https://www.cnblogs.com/wintersun/p/1632816.html
Copyright © 2020-2023  润新知