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

  • 相关阅读:
    C# Using MySQL
    C++ Asynchronous IO on Windows
    C++ Bind adapter usage
    C# Entity Framework with MSSQL, MYSQL
    Read a file into array for C++/C#
    上下移动 04.16
    盒子模型001基础
    JavaScript&JQ 001_五角星评分
    jQuery EasyUI tree的 使用
    自定义实现URL重写 04.18
  • 原文地址:https://www.cnblogs.com/flysun0311/p/2662048.html
Copyright © 2011-2022 走看看