zoukankan      html  css  js  c++  java
  • fn_SplitStringToTable

    -- Set the database where the stored procedure is located
    USE SecurityData
    GO

    -- Drop older version if it exists
    IF OBJECTPROPERTY(OBJECT_ID(N'dbo.fn_SplitStringToTable'), N'IsTableFunction') = 1
       DROP FUNCTION dbo.fn_SplitStringToTable
    GO
    -- Procedure:     dbo.fn_SplitStringToTable
    -- Purpose:      
    -- Location:      SecurityData
    -- Authorized To: N/A
    -- Last Update:   07/31/2005
    -- Parameters:
    --    Input
    --       1. p_Input             VARCHAR(MAX)      -
    --       2. p_Delimeter         CHAR(1)           -
    --    Output
    --       None
    -- Result Set:
    --    None
    --
    -- Return: @@ERROR
    -- Exception return values:
    --
    -- Author:      Michael .H
    -- Create Date: 07/31/2005
    -- Customization Level: Low
    -- Revisions:
    --
    CREATE FUNCTION dbo.fn_SplitStringToTable
    (
       @p_Input     VARCHAR(MAX),
       @p_Delimeter CHAR(1) = ','
    )
    RETURNS @l_Table TABLE
    (
       Id       INT IDENTITY(1, 1),
       Value    VARCHAR(511),
       Position INT,
       Length   INT
    )
    WITH ENCRYPTION
    BEGIN
       DECLARE @l_Position INT,
               @l_Value    VARCHAR(256)
      
       SELECT @l_Position = 1,
              @l_Value = ''
      
       IF RIGHT(@p_Input, LEN(@p_Delimeter)) <> @p_Delimeter
          SET @p_Input = @p_Input + @p_Delimeter
      
       WHILE SUBSTRING(@p_Input, @l_Position, 1) = CHAR(10) OR
             SUBSTRING(@p_Input, @l_Position, 1) = CHAR(13)
       BEGIN
          SELECT @l_Position = @l_Position + 1
       END
      
       WHILE @l_Position <= CHARINDEX(@p_Delimeter, @p_Input, @l_Position)
       BEGIN
          SET @l_Value = RTRIM ( LTRIM ( SUBSTRING ( @p_Input,
                                                     @l_Position,
                                                     CHARINDEX ( @p_Delimeter,
                                                                 @p_Input,
                                                                 @l_Position) - @l_Position ) ) )
         
          IF NOT EXISTS ( SELECT 1
                            FROM @l_Table
                           WHERE Value = @l_Value )
          BEGIN
             INSERT INTO @l_Table ( Value, Position, Length )
                  VALUES ( @l_Value, @l_Position, CHARINDEX ( @p_Delimeter,
                                                              @p_Input,
                                                              @l_Position ) - @l_Position )
          END
         
          SELECT @l_Position = CHARINDEX(@p_Delimeter, @p_Input, @l_Position) + 1
         
          WHILE SUBSTRING(@p_Input, @l_Position, 1) = CHAR(10) OR
             SUBSTRING(@p_Input, @l_Position, 1) = CHAR(13)
          BEGIN
             SELECT @l_Position = @l_Position + 1
          END
       END
       RETURN
    END
    GO

    GRANT SELECT ON dbo.fn_SplitStringToTable TO rl_DataDownload
    GRANT SELECT ON dbo.fn_SplitStringToTable TO rl_DataUpload

    GO

  • 相关阅读:
    470. 用 Rand7() 实现 Rand10() 采样
    165. 比较版本号 字符串
    Java 通过属性名称读取或者设置实体的属性值
    双非Java的学习之旅以及秋招路程
    【Unity3D】不可读Texture资源的获取
    java 8 Map 之merge用法
    Jmeter-计数器的应用
    Jmeter-集合点【同步定时器】应用
    2. Go并发编程--GMP调度
    Go序列化嵌套结构体
  • 原文地址:https://www.cnblogs.com/flysun0311/p/2662048.html
Copyright © 2011-2022 走看看