2

我正在 sql server management studio 2012 中处理生成动态列的查询,因为我们使用了数据透视将行转换为列。由于某些限制,我们不能使用存储过程来返回透视结果集。为了使用枢轴获得与动态列相同的结果集,我尝试了以下方法,但陷入了某些或其他问题。

  1. 使用视图,在这里我们不能声明变量,因此我们不能有一个变量来保存动态列并将其传递给 PIVOT。

  2. 使用表值函数。

a) 我们可以在函数中声明变量并在数据透视表中提供动态列的一种方法需要将静态列指定为输出列。但我的查询会生成动态列。

b)另一种我们不能声明变量并且不需要提及输出列的方法,显示在发布的示例中。在这里,我能够返回旋转后的结果集,但如前所述,由于我们无法声明变量,因此我们无法在 pivot 中提供动态列。

ALTER FUNCTION [dbo].[func_A] 
    ()
RETURNS TABLE
AS
RETURN  
(
    WITH cte AS
    (
       SELECT *
       FROM 
           (SELECT
                DD.DesignId, DD.FactoryId, DD.DesignDescription, 
                DD.OfferingTree, DD.LeadTime, DD.AvailableStatus, 
                TS.ParameterValueFrom, TS.ParameterName 
            FROM
                dbo.TechnicalSpecification AS TS 
            INNER JOIN 
                DesignData AS DD ON TS.DesignId = DD.DesignId) ps
PIVOT
(
    MAX(ParameterValueFrom) 
    FOR ParameterName IN ( [**Bushing Family**])) AS pvt   
)

SELECT *
FROM cte
)

粗体变量是我们需要提供动态列的地方。

c) 使用 OpenRowSet 的另一种方法,如下所示

    SELECT * 
    INTO #MyTempTable 
    FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;', 'EXEC getBusinessLineHistory')

这种方法说我们需要安装 SQLNCLI。我们正在安装 SQLNCLI。这种方法会奏效吗?

有没有其他方法可以执行生成动态列的存储过程,可以在“in 子句”中提供给 PIVOT?

4

1 回答 1

0

我能够使用 SQLNCLI 执行存储过程

SELECT * FROM OPENROWSET('SQLNCLI', 'Server=(machinename);Trusted_Connection=yes;', 'EXEC procedurename'

于 2017-05-24T12:14:14.610 回答