【问题标题】:How to add a Column to stored procedure result?如何在存储过程结果中添加列?
【发布时间】:2017-09-18 09:21:07
【问题描述】:

我有以下 sql 过程:

DECLARE @temp table
    (
       Column1 nvarchar(1000)
    )

    INSERT @temp (Column1)
    SELECT  fld_4
    FROM    MyTable
    WHERE   fld_1 = @param1 and
            fld_2 = @param2 and
            fld_3 = @param3

     SELECT ROW_NUMBER() OVER(ORDER BY Column1 ASC) AS Number, Split.a.value('.', 'VARCHAR(100)') AS Result
     FROM  
     (
         SELECT Column1,  
             CAST ('<M>' + REPLACE(Column1, ';', '</M><M>') + '</M>' AS XML) AS Result  
         FROM  @temp
     ) AS A CROSS APPLY Result.nodes ('/M') AS Split(a);

MyTable 的结构:

| fld_1 | fld_2 | fld_3 | fld_4 | ... | fld_9 | ...|

其中 fld_4 包含如下内容:

-9;-9;-1;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-1;-1;-1;-1;-9;-1;-1;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-1;-9;-9;-1;-1;-9;-1;-1;0000;FFF8;-9;-9;-9;-1;-9;-1;-9;FFF6;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9

我的过程返回一个具有这种结构的表:

| Number | Result |
|   1    |   -9   |
|   2    |   -9   |
|   3    |   -1   |
|  ...   |   ...  |

现在,我想达到以下结果:

| Number | Result |     NewColumn    |
|   1    |   -9   |  Value of fld_9  |
|   2    |   -9   |  Value of fld_9  |
|   3    |   -1   |  Value of fld_9  |
|  ...   |   ...  |  Value of fld_9  |

有什么建议吗?

【问题讨论】:

    标签: sql sql-server stored-procedures sql-server-2012


    【解决方案1】:

    您不能直接调用Stored Procedure 结果..

    但是,您可以使 view 或 table-valued user-defined 函数然后获得结果..

    其他方式在TempTable上插入存储过程结果

    INSERT INTO #tempTable EXEC MyStoredProcedure
    

    看看这个快速示例

    Create PROCEDURE SampleStoreProc    
    AS
    BEGIN   
        Select 'Burak', 1 
    END
    GO
    
    
    Create Table #TempTable
    (    
        MyCol Varchar(50),
        ReferanceCol int
    )
    
    Insert into #TempTable Exec SampleStoreProc 
    
    go
    
    Create Table TestTable2 
    (
        MyCol2 varchar(250),
        RefCol int
    );
    
    go
    
    Insert into TestTable2 values ('Yeni', 1);
    
    Select a.MyCol, b.MyCol2 From #TempTable a
    left join TestTable2 b on b.RefCol = a.ReferanceCol
    

    【讨论】:

      【解决方案2】:

      如果我理解您的要求,您只需要将另一列包含在您的结果集中。类似以下 sn-p 的东西应该可以工作。保留您的 FROMclause,并在其末尾添加 , MyTable。

      ...
      SELECT 
            ROW_NUMBER() OVER(ORDER BY Column1 ASC) AS Number
          , Split.a.value('.', 'VARCHAR(100)') AS Result
          , fld_9 AS NewColumn
      FROM 
      ...
          , MyTable
      WHERE
          MyTable.fld_1 = @param1 AND
          MyTable.fld_2 = @param2 AND
          MyTable.fld_3 = @param3;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多