2009-09-04 12 views
1

を実行しているマニュアルのカーソルと行の右の数が0の行を返します。 @par_Fechaパラメータは、ストアドプロシージャの入力パラメータです。選択は、私は、このカーソル宣言をしました

ストアドプロシージャを実行すると、このカーソルには1行も表示されません。通常のWHILE @@ FETCH_STATUS = 0ループに入ることはありません。

私はクエリアナライザで選択コードをコピーし、パラメータを値で置き換えようとしていますが、正しい行が得られます。

私はなぜこれが起こらないSQL Server 2008の

でこれを実行していますか?

ありがとうございます。

EDIT:

全ストアドプロシージャコード:

ALTER PROCEDURE [DBO] [paCreTablaHojaDeCajaMA] AS DATETIME AS @par_Fechaは をBEGIN - SET NOCOUNT ONから余分な結果セットを防ぐために添加。 - SELECTステートメントに干渉します。 SET NOCOUNT ON;

DELETE FROM dbo.TmpDetalleHojaDeCajaDiaria 
DELETE FROM dbo.TmpMaestraHojaDeCajaDiaria 

INSERT INTO TmpMaestraHojaDeCajaDiaria 
    (NumUsuario, ZonaAsignada, TipoUsuario, NumPDA, ImporteUsuarioZona) 
SELECT 
    hstZA.NumUsuario, hstZA.NumZonaAsignada, 
     (SELECT TipoUsuario FROM Usuarios U WHERE U.NumUsuario=hstZA.NumUsuario) AS TipoUsuario, 
     (SELECT NumPDA FROM Usuarios U WHERE U.NumUsuario=hstZA.NumUsuario) AS NumPDA, 
     (SELECT SUM(hstT.ImporteTotal) FROM HstTickets hstT 
      WHERE hstT.NumUsuarioEmisor=hstZA.NumUsuario 
      AND hstT.NumZona=hstZA.NumZonaAsignada 
      AND DATEDIFF(day,hstZA.Fecha,HstT.FechaHoraTicket)=0) AS ImporteUsuarioZona 
FROM hstZonasAsignadas hstZA 
WHERE DATEDIFF(day,hstZA.Fecha,@par_Fecha)=0 
ORDER BY NumUsuario 


DECLARE @UsuarioAct NCHAR(4) 
DECLARE @ZonaAct SMALLINT 
DECLARE @IdUnicoAct INTEGER 
DECLARE @IdArticulo INTEGER 
DECLARE @NombreArticulo NCHAR(50) 
DECLARE @PrecioUd MONEY 
DECLARE @SumaCantidad INTEGER 

DECLARE CursorMaestra CURSOR FOR 
    SELECT NumUsuario, ZonaAsignada, IdUnico FROM TmpMaestraHojaDeCajaDiaria 
    ORDER BY NumUsuario 

OPEN CursorMaestra 

PRINT 'CURSOR ABIERTO' 

-- Vamos a por el primero 
FETCH NEXT FROM CursorMaestra INTO @ZonaAct, @UsuarioAct, @IdUnicoAct 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    PRINT @ZonaAct 
    PRINT @UsuarioAct 

    DECLARE CursorArticulo CURSOR FOR 
     (SELECT HstAt.IdArticulo, SUM(HstAt.Cantidad) As SumaCantidad, HstAt.Precio 
     FROM HstArticulosTickets hstAT INNER JOIN HstTickets HstT 
      ON hstAT.IdTicket=hstT.IdTicket 
     WHERE [email protected] 
           AND [email protected] 
           AND DATEDIFF(day,@par_Fecha,HstT.FechaHoraTicket)=0 
     GROUP BY IdArticulo, Precio) 

    OPEN CursorArticulo 
    PRINT ' CURSOR ABIERTO' 

    -- Vamos a por el primero 
    FETCH NEXT FROM CursorArticulo INTO @IdArticulo, @SumaCantidad, @PrecioUd 

    PRINT @@FETCH_STATUS 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 

     SELECT @NombreArticulo = NombreArticulo FROM Articulos 
      WHERE IdArticulo = @IdArticulo 

     PRINT @NombreArticulo 

     INSERT INTO TmpDetalleHojaDeCajaDiaria 
      (NumUsuario, ZonaAsignada, IdArticulo, NombreArticulo, PrecioUD, CantidadZonaUsuario, IdUnicoMaestra) 
     VALUES 
      (@UsuarioAct, @ZonaAct, @IdArticulo, @NombreArticulo, @PrecioUd, @SumaCantidad, @IdUnicoAct) 

     FETCH NEXT FROM CursorArticulo INTO @IdArticulo, @SumaCantidad, @PrecioUd 



    END 

    CLOSE CursorArticulo 
    DEALLOCATE CursorArticulo 

    PRINT ' CURSOR CERRADO' 

    FETCH NEXT FROM CursorMaestra INTO @ZonaAct, @UsuarioAct, @IdUnicoAct 
END 

CLOSE CursorMaestra 
DEALLOCATE CursorMaestra 

PRINT 'CURSOR CERRADO' 

END

+0

カーソルの読み方やカーソルの閉じ方など、保存されている手順をさらに提供できますか? –

答えて

0

私はそれを見つけました!

あなたが外カーソル宣言読めば:NumUsuario

順序はNumUsuario、ZonaAsignadaあるBY TmpMaestraHojaDeCajaDiaria ORDER FROM SELECT NumUsuario、ZonaAsignada、IdUnico FOR

DECLARE CursorMaestraのCURSOR、IdUnico

しかし、後で、最初のFETCH:

FETCH NEXT FROM CursorMaestra INTO @ZonaAct、@UsuarioAct、@IdUnicoAct

私は順序を変更しました。正しいものは@UsuarioAct、@ZonaAct、@IdUnicoActです。

したがって、ユーザー(UsuarioAct)とゾーン(ZonaAct)のデータが間違っていました。

ありがとうございました。

0

あなたは (のSELECTのような

DECLARE CursorArticuloのCURSORのために括弧を追加してみてくださいすることができ SELECT HstAt.IdArticulo、SUM SumaCantidadとして(HstAt.Cantidad)、HstAt.Precio FROM HstArticulosTickets hstAT INNERはhstAT.IdTicket = hstT.IdTicket WHERE [email protected][email protected] HstTickets HstT を登録しようとDATEDIFF(par_Fecha @日、HstT.FechaHoraTicket)= IdArticulo BY 0 GROUP、IdArticulo BY PRECIO ORDER)

変数@UsuarioActと@ZonaActあるが読み込ま取得しますか?手動のクエリで試したときに同じものを置き換えることはできますか?

+0

はい、変数@UsuarioActと@ZonaActにはリグの値が入力されています。 私はかっこを試してみよう... –

+0

非常に好奇心:括弧を追加すると、 "ORDERの近くで構文エラーが発生する"ので、ORDER BY IdArticuloを離しますが、同じ0行が得られます。手動で実行している場合、ORDER BYがあり、エラーは発生しません(繰り返す:正しい4行を戻す)。 –

+0

@UsuarioActと@ZonaActを生成する他のカーソルを含むクエリ全体をポストすることはできますか? ネストされたカーソルを試しているようですが、以下は私が参照するリンクの1つです。http://rpbouman.blogspot.com/2005/10/nesting-mysql-cursor-loops.html – Umesh

0

変数@UsuarioActと@ZonaActが正しいデータ型として宣言されていますか?

暗黙の変換は、データの意味を微妙に変更しているのでしょうか?

+0

こんにちはKev:私はそれをテストして、すべてのタイプが正しいです。 Thnx。 –

0

最初に内部カーソルに@@ FETCH_STATUS = -1が得られたので、SELECT文が行を返さないと判断します。あなたは、クエリを実行したときに結果を得ることを言及はなく、次のことを試してみてくださいください:

SELECT  HstAt.IdArticulo, SUM(HstAt.Cantidad) As SumaCantidad, HstAt.Precio 
FROM  HstArticulosTickets hstAT 
INNER JOIN HstTickets HstT 
     ON hstAT.IdTicket=hstT.IdTicket 
WHERE  [email protected] 
     AND [email protected] 
     AND DATEDIFF(day,@par_Fecha,HstT.FechaHoraTicket)=0 
GROUP BY IdArticulo, Precio 

しているかどうかを確認:最初の BEGIN ... ENDブロックの内容は、次のコードで置き換えて、あなたが結果セットを取得するかどうかを確認します結果を得る。もしそうでなければ、WHERE句のいくつかのフィルタを削除してください...

+0

私はあなたのSQLコードのインデント方法が好きです。それをコピーできますか? –

+0

ビールとして無料で...限り、あなたのチームの締結基準を破ることはありません – van

関連する問題