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 |