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