2012-03-02 14 views
-1

私はTSQL/SQLに新しいですし、私はTSQL/SQLで 'whileループ' 学びたいと思っています。 「ループ」に関する私の知識を向上させる良いサイトや本がありますか?あなたのご意見は大変ありがとうございます。TSQL/SQL - ループ

+10

SQLでループ構造避け、集合演算について考え始めます。 SQLでは、ループ構造が_費用がかかります。 – Oded

+0

オデッドに感謝します。学習教材に関するアイデア。 – Warne

+0

SSMSのオンラインヘルプを読んだり、Googleだけ 'あなたはSQLでループを余儀なくされている場合のTransact-SQL' –

答えて

1

あなたは本を必要としない - ちょうどcursor functionality in T-SQLをよく読んで。ループを示すコード例があります。 Oded氏のように、ループは不可欠な構成要素ですが、SQLは宣言的言語です。SQLでは "間違っている"と言われていますが、本当に "今すぐ実行する"必要があるときは機能はあります。与えられた条件がもはや満たされるまで

+0

が、少なくともWHILEを使用しています。決してカーソルを使用しないでください!カーソルは最終的にパフォーマンスを低下させます。繰り返しますが、カーソルは使用しないでください。 –

+0

チップのおかげで。両方の話題について読んで、他の話題よりも優れている理由を確認します。 – Warne

+0

私は、CURSORがあなたのパフォーマンスを殺すというコメントに同意しない場合があります。たとえば、CURSORの操作から生成された動的SQL文字列を作成して、セットベースの操作を実行します。決して非常に強い言葉です。 – wergeld

1

SQLループはかなり他のプログラミングのループと同じである、のように、それが実行されません。 しかし、Odedが述べたように、SQLは主にSETベースの言語であり、手続き型言語としては弱いです。特にSQLに関しては、セットとプロシージャの違いについては、thisの記事を参照してください。彼らは一度にデータのグループに基づいて、より設定されているように

だから、結論では、任意のループクエリを書き換えする方法を探してください。あなたができない場合は、多分それはコードの問題の詳細です、そしてSQLない

通常、whileループを避けることができ、SQLチームがかなりよく実施されてきた良い解決策は以下の通りです。あなたがコードに行くことができない、まだSQL

  • CTEで効率的なソリューションを探している、または共通テーブル式は、あなたがrecursion
+0

入力していただきありがとうございます。私はシナリオについて考えていました。たとえば、テーブル内のすべての行が何かをするようなものです。このようなケースではループが必要な場合があります。 – Warne

+0

私は自分の答えをCTEの方向に向けて更新しました。通常、ループで通常行っていたことを行うための効率的な方法です。しばしば、ROW_NUMBER()およびPARTITIONと組み合わせられます。しかし、私はSETロジックで考えようとすることについて再度反復します。そのような方法でソリューションを作成できない場合は、特にコードを使用してください。 –

+0

CTEがこのトリックを行う可能性があります。それについて読む。ありがとう。 – Warne

0
ようなものが必要場合は特に、非常に強力である場合にうまくいけば、これはあなたを助けることができます

MSDNは、通常、Microsoftテクノロジスタックの中で最も優れたオンラインドキュメントです。

MSDN - While (Transact-SQL)

+0

リンクありがとうございました。MSDNは情報のための良い場所です。 – Warne