2009-07-24 7 views
-1

カーソルを使用して処理するテーブルがあります。構造は次のようになっています: RID |スクール|オーダー|テキストフィールドを使用したカーソルのアドレッシング(SQL Server)

今、私は他の学校(私だけが表示されている)を除外し、次に私は注文しますので、私は自分が望むようにテキストを並べるようにします。さて、私の問題は、順序がまっすぐにそれが1,2,3,200,823などに行くからスキップすることができますが、私は基本的に

SELECT * FROM SCHOOL_DATA WHERE [email protected] 
を行うことができるようにする必要がある(それらのすべては、学校ごとに一意であるが)増加していないされています

注文は元の注文値です。カーソルを使用すると(ABSOLUTEを使用しても)ORDERフィールドが1から2までスキップして、ORDER = 100が内部テーブルの3番目の行であると考えられるように、テーブルが平らになります。

しかし、それは私が

FETCH ABSOLUTE 100.. 

を行うと、実際に= 100を注文するために対応する行を取得することができるようにカーソルでそのようなことに対処することは可能ですか?

+0

「MSSQL」というタグは使用しないでください。代わりに "sql-server"を使用してください。また、 "MySQL"と簡単に混同する可能性があるので、一般的に "MSSQL"は避けてください。 –

+0

RANK&オーダーを使ってみませんか? –

答えて

0

カーソルを使用せずに一度に行を選択する方が良いと思うように聞こえます。ソラリンの答えに残ったコメントに基づいています。次のようなもの:

declare ... all the variables to hold the different columns. 
declare @CurrentOrder ... proper datatype 

set @CurrentOrder = ... initial value 
while(1=1) 
begin 
    Select @Var1 = Column1, @Var2 = Column2, etc, @GotoWhere = GotoWhere 
    from SCHOOL_DATA 
    where Order = @CurrentOrder 
    select @RC = @@Rowcount, @E = @@ERROR 
    ... do error handling if @RC <> 1 or @E <> 0. Can wrap with try catch if using 2005+ 
    ... do work. 
    ... error out if @GotoWhere is null 
    if (... done condition ...) 
    exit 
    set @CurrentOrder = @GotoWhere 
end 
0

これを可能にするには、見つからないすべてのOrderの値に対して空の行を生成するクエリを作成する必要があります。愚かなことのように見える。私はカーソルがあなたがを達成しようとしているものは何でものために正しいことではないという印象を受けます

の人が実行可能な選択肢を提供できるように、多分あなたは、意図についてもう少し説明できますか?

たとえば、結果を表変数に入れて、その表に正しいOrder値を照会することが選択肢のように見えます。

DECLARE @school int = 1 

DECLARE @schoolData TABLE 
(
    RID int, 
    School int, 
    [Order] int, 
    Text ntext 
); 

INSERT INTO @schoolData 
    SELECT * 
    FROM SCHOOL_DATA 
    WHERE [email protected] ORDER BY [Order] 

SELECT * FROM @schoolData WHERE [Order]=100 

ただし、私は、あなたがカーソルも一時的な記憶装置も使用してはならないという明白な印象を得る。

+0

さて、このテーブルにはステップのリストがあります。各行には、真または偽と評価される小さなコードがあります。次に、GOTOWHEREフィールドがあります。 GOTOWHEREがNULLの場合、エラーを出力します。それ以外の場合は、STEPに設定されます。私はこのハッキングされたシステムに対処しなければならないので、別のチェックが必要な場合は「ステップ」の間に余裕を持たせたいと思います。他のすべての行をシフトするのではなくステップを追加するのは簡単ですステップダウン。 – Earlz

+0

実際、できるだけ多くのコードを書き換えないようにしたいからです。私が現在使用しているこのシステムは、大きな書き換えが必要なため、クライアントを保持するためにこの1つの作業を行う必要があります... – Earlz

関連する問題