2013-12-09 4 views
0

У меня есть процедуру SQL Server, возвращающееся мне такой выход:значения множественного столбца ссылочного в SQL Server

ID | Name | Value 
100 | Name1 | COUNT([104]) 
101 | Name2 | ADD([100],[102]) 
102 | Name3 | SELECT([100]) 
104 | Name4 | SUB([100],[101],[102]) 

Я хочу, чтобы разрешить строки, содержащиеся в значении их соответствующее имя значений столбца так, что выходной заключается в следующем:

ID | Name | Value 
100 | Name1 | COUNT([Name4]) 
101 | Name2 | ADD([Name1],[Name3]) 
102 | Name3 | SELECT([Name1]) 
104 | Name4 | SUB([Name1],[Name2],[Name3]) 

по существу, мне нужно, чтобы заменить все идентификаторы в квадратных скобках [] в столбце Значение, с их фактическими значениями имени.

Как мне добиться достижения этого результата?

+2

Как хранятся ваши данные? Если он хранится в нормальной форме и хранимая процедура денормализует его, то, вероятно, лучше будет запрашивать необработанные данные, а не работать с выходом процедуры. – GarethD

+0

Можете ли вы опубликовать свою процедуру? Кроме того, что вы пытаетесь сделать с этим значением? Если вы собираетесь его выполнить, лучше сделать это напрямую. – mayabelle

+0

действительно хорошие вопросы. если вам действительно нужно это сделать, как вы упомянули, вы можете проверить мой ответ. –

ответ

0

Как мне добиться достижения этого результата?

Если вам действительно нужно сделать, это приведет к довольно уродливой функции, которая анализирует номер строки:

CREATE FUNCTION dbo.udf_GetNumeric 
(@strAlphaNumeric VARCHAR(256)) 
RETURNS VARCHAR(256) 
AS 
BEGIN 
DECLARE @intAlpha INT 
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) 
BEGIN 
WHILE @intAlpha > 0 
BEGIN 
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '') 
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) 
END 
END 
RETURN ISNULL(@strAlphaNumeric,0) 
END 
GO 

Тогда ваш запрос будет выглядеть следующим образом:

SELECT ID, NAME, REPLACE(Value, dbo.udf_GetNumeric(Value), NAME) 
+0

Я понимаю, что вы пытаетесь общаться. Когда я вызываю функцию REPLACE, все замены регулярного выражения в [] заменяются или только первые? – Rg90

+0

Я хотел бы, чтобы значения внутри [] были заменены значениями Name. Идентификатор и имя существуют в одной таблице, поэтому я могу сделать запрос SELECT. Однако значение возвращается через несколько соединений. Поэтому я передаю значение в значение FUNCTION и хочу, чтобы возвращаемое значение было заменено именем, которое я извлекаю из первой таблицы на основе того же идентификатора. – Rg90

+0

@ Rg90 Это должно быть именно то, что вы ищете, основываясь на ваших описаниях. –

Смежные вопросы