在SQL Server中引用多个列值

时间:2013-12-09 15:49:04

标签: sql sql-server stored-procedures

我有一个SQL Server程序返回这种输出:

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

我想将Value中包含的字符串解析为各自的Name列值,以便输出如下:

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

基本上,我需要使用实际的Name值替换Value列中方括号[]内的所有ID。

我应该如何实现此输出?

1 个答案:

答案 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)