NJC__Documentation::DB

dbo.XQS_ConvertNameValueUStringToTable

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Null on Null Input

False

Schema Bound

False

Assembly

Parameters

Name Data Type Length Description
@RawData nvarchar -1
@RowSeparator nvarchar 10
@ColSeparator nvarchar 10

SQL Script

SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
create FUNCTION dbo.XQS_ConvertNameValueUStringToTable(@RawData nvarchar(max), @RowSeparator nvarchar(10), @ColSeparator nvarchar(10))
RETURNS @T TABLE (Col1 nvarchar(128), Col2 nvarchar(1024) NULL, Col3 nvarchar(1024) NULL)
AS
BEGIN

 if (len(rtrim(ltrim(@RawData))) < len(@RowSeparator))
 BEGIN
  RETURN
 END

declare @pos int, @piece nvarchar(256)
declare @subpos int, @subpos2 int
declare @pieceCol1 nvarchar(128), @pieceCol2 nvarchar(1024), @pieceCol3 nvarchar(1024)

 -- Need to tack a delimiter onto the end of the input string if one doesn't exist
 if right(rtrim(@RawData),len(@RowSeparator)) <> @RowSeparator
 set @RawData = @RawData + @RowSeparator

 set @pos =  charindex(@RowSeparator, @RawData)
 while @pos <> 0 
 BEGIN
  if (@pos > 1)
  BEGIN
   set @piece = left(@RawData, @pos - 1)

   set @subpos = charindex(@ColSeparator, @piece)
   set @pieceCol1 = left(@piece, @subpos - 1)
   set @subpos2 = charindex(@ColSeparator, @piece, @subpos+len(@ColSeparator))
   if (@subpos2 > @subpos)
   BEGIN
    set @pieceCol2=substring(@piece, @subpos+len(@ColSeparator), @subpos2 - @subpos - len(@ColSeparator))
    set @pieceCol3=substring(@piece, @subpos2+len(@ColSeparator), len(@piece)-@subpos2)
   END
   ELSE
   BEGIN
    set @pieceCol2=substring(@piece, @subpos+len(@ColSeparator), len(@piece)-@subpos)
    set @pieceCol3=null
   END

   insert into @T(Col1, Col2, Col3) Values (@pieceCol1, @pieceCol2, @pieceCol3)
  END
  set @RawData = stuff(@RawData, 1, @pos + len(@RowSeparator)-1, '')
  set @pos = charindex(@RowSeparator, @RawData)
 END
 RETURN 
END
GO

Depends On

No items found

Used By

1