【发布时间】:2016-04-29 06:01:13
【问题描述】:
我有解析 MDX 表达式的 T-SQL 脚本。它看起来像:
IF OBJECT_ID ( 'tempdb..#metrics' ) IS NOT NULL
DROP TABLE #metrics
CREATE TABLE #metrics (
Metric VARCHAR(255)
)
---
DECLARE @counter INT = 1
DECLARE @mdx VARCHAR(4000) = 'SELECT {[Measures].[One],[Measures].[Two],[Measures].[Three],[Measures].[Four]} DIMENSION, PROPERTIES OTHER'
DECLARE @startString INT
DECLARE @endString INT
DECLARE @metric VARCHAR(200)
WHILE (1=1)
BEGIN
-- loop data and process them
SET @startString = (SELECT PATINDEX('%[[]Measures%',@mdx))
SET @endString = (SELECT CHARINDEX(',',@mdx))
SET @metric = (SELECT SUBSTRING(@mdx, @startString, @endString - @startString))
IF @metric LIKE '%}%'
BEGIN
SET @metric = LEFT(@metric, CHARINDEX('}',@metric) - 1)
INSERT INTO #metrics ( Metric ) SELECT @metric
SET @mdx = REPLACE(@mdx, @metric, '')
END
ELSE
BEGIN
INSERT INTO #metrics ( Metric ) SELECT @metric
SET @metric = @metric + ','
SET @mdx = REPLACE(@mdx, @metric, '')
END
-- break while
IF @mdx NOT LIKE '%[[]Measures%,%'
BEGIN
BREAK;
END
END
---
SELECT * FROM #metrics
现在,我需要将其应用于更多行,但不知道如何。我用光标尝试过,但它永远不会结束。如何循环以下行的逻辑?
DECLARE @srcTable TABLE (
ID INT
,textData VARCHAR(4000)
)
INSERT INTO @srcTable ( ID, textData ) ( 1, 'SELECT {[Measures].[One],[Measures].[Two],[Measures].[Three],[Measures].[Four]} DIMENSION, PROPERTIES OTHER' )
,(2, 'SELECT {[Measures].[Five],[Measures].[Six],[Measures].[Seven]} DIMENSION, PROPERTIES OTHER' )
期望的结果:
1 [Measures].[One]
1 [Measures].[Two]
1 [Measures].[Three]
1 [Measures].[Four]
2 [Measures].[Five]
2 [Measures].[Six]
2 [Measures].[Seven]
【问题讨论】:
标签: sql-server tsql while-loop cursor sql-server-2014