2016-12-07 3 views
0

私は私にstartDateendDateユーザ定義パラメータに基づいて、このような出力を返し、myStoredProcedureという名前の、ストアドプロシージャ(SP)を持っている:SPを修正せずにSPによって返された結果セットに追加の列を追加する方法はありますか?

PrimaryName SecondaryName Volume 
    A    B   20 
    C    D   30 
    A    D   50 
    ... 

ので、ボリュームが定義された日付の間のすべてのケースの合計を表します。

mySecondStoredProcedureという名前の別のSPでは、最初のSPを使用して結果を取得しています。しかし、私の問題は、私の出力には、yearである追加の属性が必要だということです。私は年間ベースのボリュームを見たいと思っています。私はmyStoredProcedureを変更することは許されないのです

PrimaryName SecondaryName Volume Year 
    A    B   12  2014 
    C    D   14  2014 
    A    D   20  2014 
    A    B   8  2015 
    C    D   16  2015 
    A    D   30  2015 
    ... 

:したがって、私は見たい出力はその

のようなものがstartDate: 2014, endDate: 2015を前提としています。したがって、私はwhileループを2番目のSPに作成して受信します。私のコードは次のようである:

declare @temp_table table 
(
    PrimaryGroup varchar(10), 
    SecondaryGroup varchar(10), 
    Volume int 
) 

while @startDate < @endDate 
begin 
    insert into @temp_table 
    exec myStoredProcedure @startDate @endDate 

    set @startDate = DATEADD(YEAR,1,@startDate) 
end 

select * from @temp_table 

これはyear列なしで私の結果を与えています。上記の出力例で示したように、yearの列が必要です。私はそれを追加する方法を見つけることができませんでした。 myStoredProcedureによって返される結果セットには主キーはありません。また、SQL Server 2008では、フィールドが一致しないと言って@temp_tableyear列を追加することはできません。 year列を正しく追加するにはどうすればよいですか?どんな助けもありがとう!

編集:私は@temp_tableの定義でyear列を追加すると、エラーが私が受け取る:Column name or number of supplied values does not match table definition.

答えて

2

あなたが現在持っている構文と密接している、あなただけにyearを追加する必要がありますtempテーブルに格納し、ストアドプロシージャを呼び出した後に供給します。さらに、プロシージャーが同じ数の列を戻さないため、挿入されている列を指定する必要もあります(習慣を身に付けておく価値があります)。

declare @temp_table table 
(
    PrimaryGroup varchar(10), 
    SecondaryGroup varchar(10), 
    Volume int, 
    Year int 
) 

while @startDate < @endDate 
begin 
    insert into @temp_table (PrimaryGroup, SecondaryGroup, Volume) 
    exec myStoredProcedure @startDate @endDate 

    Update @temp_table 
    Set  Year = @StartDate 
    Where Year Is Null 

    set @startDate = DATEADD(YEAR,1,@startDate) 
end 

select * from @temp_table 
+0

年の列を宣言に追加すると、次のエラーが表示されます。列名または指定された値の数がテーブル定義と一致しません。 –

+0

@ErayBalkanli挿入している列を含めるには、INSERT文を変更する必要があります。私の答えでは 'INSERT'文の'(PrimaryGroup、SecondaryGroup、Volume) '部分に注意してください。 – Siyual

+0

ああ、ありがとう! –

0

結果を保持する第2のテーブル変数を作成します。

declare @result_table table 
(
    Year int, 
    PrimaryGroup varchar(10), 
    SecondaryGroup varchar(10), 
    Volume int 
) 

が続い@temp_tableに結果をフェッチした後whileループで:

insert into @result_table 
    select <year>, PrimaryGroup, SecondaryGroup, Volume from @temp_table; 

truncate @temp_table; 
2

あなたに年の列を追加します。テンポラリテーブルを作成し、ストラクチャードインサートを適用します。

declare @temp_table table 
(
    PrimaryGroup varchar(10), 
    SecondaryGroup varchar(10), 
    Volume int, 
    Year int 
) 

while @startDate < @endDate 
begin 
    insert into @temp_table (PrimaryName,SecondaryName,Volume) 
    exec myStoredProcedure @startDate @endDate 

    Update @temp_table set Year = @startDate where Year is Null 

    set @startDate = DATEADD(YEAR,1,@startDate) 
end 

select * from @temp 
+0

年を列として追加すると、次のエラーが表示されます。列名または指定された値の数がテーブル定義と一致しません。 –

+0

@ErayBalkanli(PrimaryName、SecondaryName、Volume)を挿入ステートメントに追加しましたか? –

+0

ああ、ありがとう! –

関連する問題