2012-04-30 1 views
0

私は新しいプロジェクトを持っており、それを効率的かつ高速に行うためのアドバイスが必要です。SQLクエリでデザインとログイン

約50〜60フィールドの約100,000行のテーブルがあります。索引付けされ、主キーがあります。この場合のプリメインキーはバーコードです。

各行を通過し、各ステップでルールを確認するクエリを作成する必要があります。主キーの数字3が0だからコードが賢明それはSUBSTRING(PkgBarcode, 3, 1) = 0

このルールが失敗した場合、私はメッセージをプリントアウトしたいだろうあれば

は、例えば最初のルールをチェックしています。 このルールが失敗するかどうかに関わらず、ルールは互いに依存しないため、ルール2には失敗する可能性がありますが、ルール3は正常です。

私は最良のデザインプラクティスを求めています。 printメッセージやある種のループでselect文を使うのは効率的でしょうか? これを迅速かつ効率的にどのように実行しますか?

+2

[スタックオーバーフローは個人研究の助手ではありません](http://meta.stackexchange.com/a/128553/140505) – Oded

答えて

0

「各行を通じて」ではなく、標準的なセット理論でこれを行いたいと思います。たとえば、あなたが実行する必要があり、各テストのためのビット列を追加し、テストに基づいて、そのビット更新するためのクエリを実行できます。

UPDATE tblMyTable 
SET [IsThirdDigitZero] = 0 
WHERE SUBSTRING(PkgBarcode, 3, 1) <> 0 

それは簡単なもののリストを引っ張って作ることカーソルを避けながら特定のテストに合っていない。

+0

ありがとうございます。しかし、私はこのスクリプトを開始する。 'SELECT * INTO #TempTable FROM master_table'。ビット列を手動で追加するかビット列を使用して新しいテーブルを作成するか – masfenix

+0

はい、まず「SELECT * INTO」を実行してから「ALTER TABLE #TempTable ADD [IsThirdDigitZero] BIT NULL」を実行すると、 'UPDATE #TempTable SET [IsThirdDigitZero] = 1'を実行すると、すべてがNULLに設定されるのではなく1に設定され、その後に適切な値が0に設定されます。もちろん、実行するテストごとにそれを行う必要があります。そして、テンポラリテーブルが破棄される前に、結果を使って何かをする必要があります。私は意味がありますか? –

関連する問題