81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
/*
 | 
						|
DECLARE @TEXT nvarchar(max)
 | 
						|
select @TEXT = TEXT from Contents where ContentID Like 17259
 | 
						|
select * from vefn_SplitROs(@TEXT)
 | 
						|
--\v <START]\v0 11%\v #Link:ReferencedObject:2933 0003000000940000 2[END>\v0
 | 
						|
 | 
						|
SELECT ContentID, RO.Value, RO.UsageID, 'R' + RO.ROID ROID, RO.RODBID  FROM CONTENTS
 | 
						|
CROSS APPLY vefn_SplitROs(TEXT) RO
 | 
						|
Where TEXT LIKE '%\v #Link:ReferencedObject:%'
 | 
						|
 | 
						|
SELECT ContentID --, RO.Value, RO.UsageID, RO.ROID  
 | 
						|
FROM CONTENTS
 | 
						|
--CROSS APPLY vefn_SplitROs(TEXT) RO
 | 
						|
Where TEXT LIKE '%\v #Link:ReferencedObject:%'
 | 
						|
 | 
						|
 | 
						|
SELECT ContentID, RO.Value, RO.UsageID, RO.ROID  FROM CONTENTS
 | 
						|
CROSS APPLY vefn_SplitROs(TEXT) RO
 | 
						|
Where CONTENTID = 708
 | 
						|
 | 
						|
*/
 | 
						|
CREATE FUNCTION [dbo].[vefn_SplitROs](@text varchar(MAX))
 | 
						|
RETURNS @ROValues TABLE
 | 
						|
(
 | 
						|
	Value varchar(max),
 | 
						|
	UsageID int,
 | 
						|
	ROID varchar(20),
 | 
						|
	RODBID int
 | 
						|
)
 | 
						|
WITH EXECUTE AS OWNER
 | 
						|
AS
 | 
						|
BEGIN
 | 
						|
DECLARE @START nvarchar(255)
 | 
						|
SET @START= '\v <START]\v0 '
 | 
						|
DECLARE @MIDDLE nvarchar(255)
 | 
						|
SET @MIDDLE = '\v #Link:'
 | 
						|
DECLARE @MIDDLERO nvarchar(255)
 | 
						|
SET @MIDDLERO = '\v #Link:ReferencedObject:'
 | 
						|
DECLARE @END  nvarchar(255)
 | 
						|
SET @END = '[END>\'
 | 
						|
DECLARE @IndexStart int
 | 
						|
SET @IndexStart = CHARINDEX(@START , @text)
 | 
						|
DECLARE @IndexEnd int
 | 
						|
SET @IndexEnd = CHARINDEX(@END , @text)
 | 
						|
WHILE (@IndexStart > 0)
 | 
						|
	BEGIN
 | 
						|
		DECLARE @PARTS NVARCHAR(MAX)
 | 
						|
		DECLARE @PART1 NVARCHAR(MAX)
 | 
						|
		DECLARE @PART2 NVARCHAR(MAX)
 | 
						|
		DECLARE @PART3 NVARCHAR(MAX)
 | 
						|
		SET @IndexStart = @IndexStart + len(@START) + 1
 | 
						|
		--PRINT @IndexStart
 | 
						|
		--PRINT @IndexEnd
 | 
						|
		SET @PARTS = SUBSTRING(@TEXT,@IndexStart,@IndexEnd - @IndexStart)
 | 
						|
		--PRINT @PARTS
 | 
						|
		DECLARE @IndexMiddle int
 | 
						|
		SET @IndexMiddle = CHARINDEX(@Middle , @PARTS)
 | 
						|
		SET @PART1 = LEFT(@PARTS,@IndexMiddle-1)
 | 
						|
		--PRINT @PART1
 | 
						|
		SET @PARTS = SUBSTRING(@PARTS,@IndexMiddle, len(@PARTS))
 | 
						|
		IF @PARTS LIKE @MIDDLERO + '%'
 | 
						|
		BEGIN
 | 
						|
			SET @PARTS = SUBSTRING(@PARTS,len(@MIDDLERO)+1,len(@PARTS))
 | 
						|
			DECLARE @IndexSpace int
 | 
						|
			SET @IndexSpace = CHARINDEX(' ',@PARTS)
 | 
						|
			SET @PART2 = LEFT(@PARTS,@IndexSpace-1)
 | 
						|
			--PRINT @PART2
 | 
						|
			SET @PARTS = LTRIM(SUBSTRING(@PARTS,@IndexSpace+1,len(@PARTS)))
 | 
						|
			SET @IndexSpace = CHARINDEX(' ',@PARTS)
 | 
						|
			SET @PART3 = LEFT(@PARTS,@IndexSpace-1)
 | 
						|
			--PRINT @PART3
 | 
						|
			SET @PARTS = LTRIM(SUBSTRING(@PARTS,@IndexSpace+1,len(@PARTS)))
 | 
						|
			--PRINT @PARTS
 | 
						|
			Insert INTO @ROValues Values(@PART1, CAST(@PART2 AS INT), @PART3, Cast(@Parts as int))
 | 
						|
		END
 | 
						|
		SET @TEXT = SUBSTRING(@TEXT,@IndexEnd + LEN(@End), LEN(@TEXT))
 | 
						|
		SET @IndexStart = CHARINDEX(@START , @text)
 | 
						|
		SET @IndexEnd = CHARINDEX(@END , @text)
 | 
						|
	END
 | 
						|
RETURN
 | 
						|
END |