TSQL:函数的返回值是列的名称

时间:2013-10-18 13:46:04

标签: sql tsql function variables

我有一个函数,它使用几种情况来查找当前周期返回一个varchar(50),它是我需要的周期列。

我想对本专栏做一个总结,我不知道该怎么做。

示例:

Select SUM(ABS([dbo].[ACTUAL_PERIOD] ())) FROM Finance_DB

任何帮助都会很棒。

另外,你认为我应该首先使用这个功能吗?基本上它所做的就是完成12个案例陈述,通过查找另一个表来确定我们处于什么时期。起初我打算使用存储过程,但是......它不会返回任何内容。我之所以要使用它是因为这个特定的case语句在整个查询和所有其他查询中重复出现。它变得很长,我认为程序/功能看起来更整洁。但是,在网上做了一些阅读之后,我明白某些情况实际上并没有从函数中受益,而不是内联编写查询,它可能是多么冗长。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您应该使用动态SQL。 例如:

declare @SQL nvarchar(100);
select @SQL='Select SUM(ABS('+[dbo].[ACTUAL_PERIOD]()+')) FROM Finance_DB';
execute sp_executesql @SQL;

答案 1 :(得分:0)

如果我正确理解您的代码,您会在不同的列中获得句点值。

 Period1 Period2 Period3...   
   100      200     400
   130      250     300    

使用unpivot将列转换为行,使其看起来像

ColumnName Value
Period1    100
Period2    200
Period3    400
...

代码看起来像

WITH Values AS (
    SELECT ColumnName
          ,Value
    FROM Finance_DB
         UNPIVOT (Value FROM ColumnName IN (Period1, Period2,...)
)
SELECT SUM(ABS(Value))
FROM Values
WHERE ColumnName = Actual_Period();