-- 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