2017-10-25 5 views
1
DECLARE @Counter int 
SET @Counter = 4 
WHILE @Counter <= 10 
BEGIN 
select @counter 
SET @Counter = @counter + 1 
END 

これは私のコードであり、結果として4つしか得られません。 set @ counter = 4を変更して@counter = 5を設定すると、最後に5つしか得られません。私はSAPビジネスの1つのクエリジェネレータを使用しています。どのように機能していないのですか?私がselect @counterENDの後に置くと、実際には11になるので....ループが実際に実行されますループが増加しないうちに変数が変更され、SAP Business Oneが使用されています

+0

なぜループが必要ですか?これは、このSAPのものが何であれ、何かする必要があります。私はカウンターとカウンターを持っていることに気づいた。私のデータベースでは大文字と小文字を区別して照合するので失敗します。これと何が関係しているのでしょうか? –

+0

SQL Server 2016 SP1では正常に動作しています。 – gotqn

+0

は 'select @ counter'を取り出し、' END'の後に入れます。あなたが11を取得しているかどうかを確認してください。デバッグのその部分。 –

答えて

0

あなたのコードは正しいと思われます...変数名を書いた方法で問題が発生する可能性があります。単一の変数:@counterと@Counterの場合、同じ大文字の使用を試してください。

また、setの代わりにselectを使用してみてください。彼らはほとんど同じことをしますが、あなたの場合にはうまくいくかもしれません。

SELECT @Counter = @Counter + 1 

のコメントを読んだ後、編集: ループ外のあなたの選択は、11が表示されている場合、代わりにそれはあまりにも4を示した場合にだけチェックする選択するのでループ内で印刷してみてください。

DECLARE @counter int 
SET @counter = 4 
WHILE @counter<= 10 
BEGIN 
    PRINT @counter 
    SELECT @counter = @counter + 1 
END 
+0

樹液を使ったことは、私が印刷を使用することができないということです。私は選択のみを使用することができます。それは実行されますが、印刷1とタイプしても何も印刷されません –

0

SAP Business Oneのクエリマネージャは、最初のselect文の結果を表示します。あなたのケースでは、すべてのデータを一時テーブルに格納して、ループから抜け出すときにそのテーブルを選択することができます。

declare @temp table (mynum int) 
DECLARE @Counter int 
SET @Counter = 4 
WHILE @Counter <= 10 
BEGIN 
    insert into @temp select @counter 
    SET @Counter = @counter + 1 
END 

select * from @temp 
関連する問題