2017-03-27 12 views
1

こんにちは、私はストアドプロシージャの出力パラメータを持っており、その値は2つの内部select文から返さなければなりません。私はこの複数の戻り値を持つselect文から出力パラメータ値と他の戻り値を取り出す

create procedure [usp_GetMessagesbyReferenceID1] 
(  
@nRowsPerPage    int, 
@nPage      int, 
@nTotalRecords    int output 
) as 
select 
    TBL.createdate, 
    TBL.templateid, 
    @nTotalRecords=TBL.TotalRecords 
    from 
    (
      select 
        message.createdate, 
        message.templateid, 
        count(1) over() as TotalRecords 
      from 
        nts.Messages as [message]  
    ) as TBL 

のように試してみました。この場合にはエイリアステーブルTBLから出力パラメータを取得する方法を以下のselect文から来る値Iを設定するには、このようにそれをしようとしている私の出力パラメータとして@nTotalRecordsを持っています出力パラメータは動作していませんが、次のエラーが発生していますA SELECT statement that assigns a value to a variable must not be combined with data retrieval operations.これを実現する可能性はありますか? ?あるいは私は文法的に間違いをしています。私を助けてください。

注:それは唯一の値(出力パラメータ値)を返しますが、私の要件は私のselect文は、複数の値を返すとき、それは正常に動作するはずである場合 select文からの出力パラメータの検索が正常に動作します(を含みます出力パラメータ)。

+0

使用しているdbmsにタグを付けます。そのコードは製品固有です。 – jarlh

+0

@jarlhはそれに応じてタグを追加しました – Meena

+0

@MarekGrzenkowicz私の要件は両方とも返すことです – Meena

答えて

1

私はこれを征服するために多くのことを試してみましたが、私はこの方法を介してこれを達成したatlastは、私はtotalrecordsカウントを取得するために、1つ以上のSELECT文を書かれています。答えが完璧で効率的かどうかはわかりませんが、それはちょうど私のためにうまくいきました。他の方法があれば教えてください。

create procedure [usp_GetMessagesbyReferenceID1] 
(  
@nRowsPerPage    int, 
@nPage      int, 
@nTotalRecords    int output 
) as 
select 
    TBL.createdate, 
    TBL.templateid 
from 
    (
     select 
     message.createdate, 
     message.templateid 
     from 
     nts.Messages as [message]  
    ) as TBL 

select 
    @nTotalRecords = count(1) 
from 
    nts.Messages as [message] 
0
select 
    @CreatedDate=TBL.createdate, 
    @nTotalRecords=TBL.TotalRecords 
    from 
    (
      select 
        message.createdate, 
        count(1) over() as TotalRecords 
      from 
        nts.Messages as [message] 

    ) as TBL 

コードは次のようになります。選択の第1列を削除しました。内部クエリがTotalRecordsに対して1つの値しか返さないと考えると、これはうまくいくでしょう。複数の値が返された場合、最後の値は@nTotalRecordsに割り当てられます。

+0

私はより多くの値を取得しています。最後の値が割り当てられたら、上記のエラーメッセージが表示されます。あなたの回答にsomepointがありませんか?お知らせ下さい。 – Meena

+0

@Meena、自分のコードを試しましたか?これによりエラーは発生しません。まだ何かエラーが発生した場合はお知らせください。 –

+0

私の要件はcreatedateとoutputパラメータを返すことですが、コードでは出力パラメータ – Meena

0

以下のコードは、TotalRecords(int値は単一値)とCreatedDate(日付はカンマで区切られた文字列)を取得するのに役立ちます。

create procedure [usp_GetMessagesbyReferenceID1] 
(  
@nRowsPerPage    int, 
@nPage      int, 
@nTotalRecords    int output, 
@CreatedDate     varchar(500) output 
) as 

select @CreatedDate= 
    STUFF ((SELECT ','+ CAST(T.dates as varchar(15)) 
      FROM nts.Messages T 
      FOR XML PATH('')),1,1,'') 
select @nTotalRecords=TBL.TotalRecords  
from 
    (select dates, count(1) over() as TotalRecords 
     from nts.Messages 
    ) as TBL 
関連する問題