Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****** Object: UserDefinedFunction [dbo].[fn_ParseText2GUIDTable] Script Date: 1/29/2018 9:28:47 PM ******/
- SET ANSI_NULLS OFF
- GO
- SET QUOTED_IDENTIFIER OFF
- GO
- ALTER function [dbo].[fn_ParseText2GUIDTable]
- (
- @p_SourceText varchar(8000)
- ,@p_Delimeter varchar(100) = ',' --default to comma delimited.
- )
- RETURNS @retTable TABLE
- (
- Position int identity(1,1)
- ,guid_value UniqueIdentifier
- )
- AS
- /*
- ********************************************************************************
- Purpose: Parse values from a delimited string
- & return the result as an indexed table
- Copyright 1996, 1997, 2000, 2003 Clayton Groom (<A href="mailto:Clayton_Groom@hotmail.com">Clayton_Groom@hotmail.com</A>)
- Modified for GUIDs by Trevor Fayas (tfayas@gmail.com - devtrev.com)
- Posted to the public domain Aug, 2004
- 06-17-03 Rewritten as SQL 2000 function.
- Reworked to allow for delimiters > 1 character in length
- and to convert Text values to numbers
- ********************************************************************************
- */
- BEGIN
- DECLARE @w_Continue int
- ,@w_StartPos int
- ,@w_Length int
- ,@w_Delimeter_pos int
- ,@w_tmp_int int
- ,@w_tmp_num numeric(18,3)
- ,@w_tmp_txt varchar(2000)
- ,@w_tmp_guid uniqueidentifier
- ,@w_Delimeter_Len tinyint
- if len(@p_SourceText) = 0
- begin
- SET @w_Continue = 0 -- force early exit
- end
- else
- begin
- -- parse the original @p_SourceText array into a temp table
- SET @w_Continue = 1
- SET @w_StartPos = 1
- SET @p_SourceText = RTRIM( LTRIM( @p_SourceText))
- SET @w_Length = DATALENGTH( RTRIM( LTRIM( @p_SourceText)))
- SET @w_Delimeter_Len = len(@p_Delimeter)
- end
- WHILE @w_Continue = 1
- BEGIN
- SET @w_Delimeter_pos = CHARINDEX( @p_Delimeter
- ,(SUBSTRING( @p_SourceText, @w_StartPos
- ,((@w_Length - @w_StartPos) + @w_Delimeter_Len)))
- )
- IF @w_Delimeter_pos > 0 -- delimeter(s) found, get the value
- BEGIN
- SET @w_tmp_txt = LTRIM(RTRIM( SUBSTRING( @p_SourceText, @w_StartPos
- ,(@w_Delimeter_pos - 1)) ))
- set @w_tmp_guid = cast(@w_tmp_txt as uniqueidentifier)
- SET @w_StartPos = @w_Delimeter_pos + @w_StartPos + (@w_Delimeter_Len- 1)
- END
- ELSE -- No more delimeters, get last value
- BEGIN
- SET @w_tmp_txt = LTRIM(RTRIM( SUBSTRING( @p_SourceText, @w_StartPos
- ,((@w_Length - @w_StartPos) + @w_Delimeter_Len)) ))
- set @w_tmp_guid = cast(@w_tmp_txt as uniqueidentifier)
- SELECT @w_Continue = 0
- END
- INSERT INTO @retTable VALUES( @w_tmp_guid )
- END
- RETURN
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement