zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    正则表达式匹配整数和小数
    解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
    ActiveMQ 消息持久化到数据库(Mysql、SQL Server、Oracle、DB2等)
    C# CLR20R3 程序终止的几种解决方案
    彻底消除wine中文乱码,QQ,kugoo等等....
    Fedora如何添加第三方软件源?
    [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)
    向fedora添加rpmfusion源
    [转]Java 8 Optional类深度解析(null处理)
    [转载]深入理解Java 8 Lambda
  • 原文地址:https://www.cnblogs.com/wintersun/p/1632816.html
Copyright © 2011-2022 走看看