I need help on a loop function. I have 2 fields. A Id field and a text field. I need to seperate the text by the delimiter of "|".
When I use the loop discussed in this forum I would expect
SELECT * FROM [dbo].[tmp_fnParseList] (
'80891')
would get me
80891 84in WIDE
80891 LOW PROFILE BUCKET
80891 BOLT ON CUTTING EDGE
In the end I would like a function that separated the text of a field by the delimiter | and include in that the unit_id field so I can join it and use it in a report.
create table tmp_table (unit_id varchar(8), spike varchar(250))
insert into tmp_table
select '80891', '84in WIDE | LOW PROFILE BUCKET | BOLT ON CUTTING EDGE | '
union
Select '100085', '61HP KUBOTA | 12,100LBS OPERATING WEIGHT | 1.10CUYD CLASS | HYDRAULIC SSL QUICK COUPLER | Z-BAR LINKAGE | 3RD SPOOL HYDRAULIC VALVE | 17.5/65-20 TIRES | 2-LEVER CONTROLS | 8,700LBS STRAIGHT TIP LOAD'
union
select '78287', '30in WIDTH | DIGGING BUCKET | 11.9 CU ft / YD CAPACITY | 70SR/80CS MOUNTING | 50MM PINS | 182MM DIPPER WIDTH | SIDE CUTTERS | 5 HENSLEY XS10 TEETH | '
CREATE FUNCTION dbo.tmp_fnParseList(@UntId varchar(8))
RETURNS @Result TABLE (RowID SMALLINT IDENTITY(1, 1) PRIMARY KEY, Data VARCHAR(8000))
AS
BEGIN
DECLARE
@NextPos INT,
@LastPos INT,
@Text Varchar(250),
@Delimiter Char
SELECT
@NextPos = CHARINDEX(@Delimiter, @Text, 1),
@LastPos = 0,
@text=(Select spike Des from tmp_table where unit_id='80891'),
@Delimiter='|'
WHILE @NextPos > 0
BEGIN
INSERT @Result
(
Data
)
SELECT SUBSTRING(@Text, @LastPos + 1, @NextPos - @LastPos - 1)
SELECT @LastPos = @NextPos,
@NextPos = CHARINDEX(@Delimiter, @Text, @NextPos + 1)
END
IF @NextPos <= @LastPos
INSERT @Result
(
Data
)
SELECT SUBSTRING(@Text, @LastPos + 1, DATALENGTH(@Text) - @LastPos)
RETURN
END