2011-08-11 24 views
0

私はPLCを使用してSQLデータベースに接続しており、値のリストを返す必要があります。残念ながら、PLCにはメモリが限られており、一度に約5,000の値しか取得できませんが、データベースには最大10,000の値が含まれています。ビューの行番号

私は2つの操作でこれらの値を取得する方法が必要です。残念ながら、PLCは実行可能なクエリでは制限されており、SELECTコマンドとWHEREコマンドのみに制限されているため、LIMITやTOPなどを使用することはできません。

ビューを作成し、そのビューのすべてのフィールドに自動番号を付ける方法はありますか?その後、すべてのレコード< 5,000を照会して、< 10,000などの2番目のクエリを照会することができましたか?

ビューはID列をサポートしていないと思われるので、手動で行う必要があります。

ご意見はありますか?現時点では私の唯一の現実的な選択肢は2つのビュー、それが違いを作る場合、私はSQL Server 2000を使用しています次の5000 ...

との最初の5000と1と1を作成することのようです...

答えて

0

は - 約20秒で100行に番号を付けるために - すなわち番号を各行のビューで、このためのパフォーマンスは本当に悪いです。このように、それは実行可能な解決策ではありません。もう1つの方法は、最初の5000レコードに1を付け、次の5,000に2を付けます。これは3つの簡単なクエリで実行でき、実行するのがはるかに迅速です。

そうするコードは次のとおりです。アンドリー・Mで指摘したように、けれども

SELECT TOP(5000) BCode, SAPCode, 1 as GroupNo FROM dbo.DB 
UNION 
SELECT TOP (10000) BCode, SAPCode, 2 as GroupNo FROM dbo.DB p 
WHERE ID NOT IN (SELECT TOP(5000) ID FROM dbo.DB) 

、あなたも、あなたがすべてのレコードを欠場いけないことを確認するために、明示的なソートを指定する必要があります。

0

2つのソリューションがあります。最も簡単なのは、SQLテーブルを変更してIDENTITY列を追加することです。それが可能でない場合は、以下のようなクエリを実行する必要があります。 10000行の場合、それは遅すぎるべきではありません。しかし、テーブルが成長するにつれて、それは悪化し、悪化します。デレクによって提供されたコードは、私は尋ねていますが

SELECT  Col1, Col2, (SELECT COUNT(i.Col1) 
       FROM yourtable i 
       WHERE i.Col1 <= o.Col1) AS RowID 
FROM   yourtable o 
+0

ありがとう、デレク、それは動作し番号を付けますが、テストデータベースで100レコードに20秒かかるので、10,000行でうまく動作しません。代わりに、最初の5,000に1を、2番目の5,000に2を付ける方法を見つけたので、代わりにそれを照会することができます。 –

+0

次のように上記のコードは次のとおり 'TOPを選択(5000)BCode、SAPCode、dbo.DB 組合FROM GroupNoとして1 SELECT TOP(10000)BCode、SAPCode、GroupNo として2 dbo.DBのP FROM IDが入力されていない場所(SELECT TOP(5000)IDからdbo。DB) ' –

+0

私はあなたが解決策を見つけられたことをうれしく思っています。あなたはそれを別の"回答 "として掲示し、あなた自身の答えを受け入れることができるので、この問題に遭遇する誰でもあなたの最終解決策を見ることができます。 –

0

一つの可能​​性は、私が今まで生産でこれを使用していないような

SELECT FROM dbo.OrderedBCodeData() WHERE RowNumber BETWEEN 5000 AND 10000 

この関数から

CREATE FUNCTION dbo.OrderedBCodeData() 
RETURNS @Data TABLE (RowNumber int IDENTITY(1,1),BCode int,SAPCode int) 
AS 
BEGIN 
    INSERT INTO @Data (BCode,SAPCode) 
    SELECT BCode,SAPCode FROM dbo.DB ORDER BY BCode 

    RETURN 
END 

ような一時テーブルを持つ関数を使用して、選択することがあるかもしれません今朝の素早いアイデアだったのですが、代替案として検討する価値がありますか?

+0

ジャスティンありがとう - それはうまくいくかもしれないように聞こえますが、私が私の記事で言及したオプションを使うことに決めました。我々は、SQLのサポートが非常に限られているPLCからデータベースと通信しています。DB機能の呼び出しをサポートするかどうかはわかりません。 –