2010-04-28 5 views
6

a)Batch vs SQL-Anweisung

eine SQL-Anweisung ist ein einzelner SQL-Befehl (zum Beispiel SELECT * FROM Tabelle1 oder SET NOCOUNT ON). Ein Stapel hingegen ist eine Anzahl von SQL-Anweisungen, die zur Ausführung als eine ganze Einheit an den Server gesendet werden. Die Anweisungen im Stapel werden in einem einzigen Ausführungsplan zusammengefasst. Batches werden von dem GO-Befehl getrennt

So ist der einzige Unterschied zwischen SQL-Anweisung und einem Batch ist, dass jede SQL-Anweisung an dem Server als eine separate Einheit gesendet wird, und somit wird getrennt von anderen SQL-Anweisungen kompiliert, während SQL-Anweisungen in ein Batch wird zusammen kompiliert?

b) Ich nehme an, einer der Hauptunterschiede zwischen einer gespeicherten Prozedur und einem Stapel besteht darin, dass gespeicherte Prozeduren vorkompiliert werden, während Stapel nicht sind?

danke

Antwort

5

a. Nur wenn jede SQL-Anweisung einzeln ausgeführt wird (zB in SSMS oder auf dem Client).

Zwei Anweisungen = "eine Charge" immer, auch wenn kein GO beteiligt ist. GO sagt lediglich ein Werkzeug wie SSMS, um die Eingaben an die Engine zu unterbrechen.

b. nicht ganz richtig. Ein gespeicherter Prozess wird vor der Analyse analysiert, aber nicht in einen Ausführungsplan kompiliert, bis er aufgerufen wird und nicht bereits im Plan-Cache. Ein Batch wird auf einmal analysiert und kompiliert und kann einen wiederverwendbaren Plan generieren.

bearbeiten, nachdem Kommentar:

  • Die Begriffe "statement" und "Batch" sind zwei verschiedene Konzepte
  • Jeder Text zum Motor DB gesendet ist ein Batch
  • Text wörtlich, dass: nein Verarbeitung wird durch die Client-Tools gemacht: nur Text an die DB-Engine gesendet
  • der Text von SQL-Anweisungen besteht

So

  • Eine Charge besteht aus mindestens einem Zeichen von Text/eine Aussage (aber könnte 2, 20 oder 20.000 Aussagen sein)
  • GO die SQL-Tools sagt, wo ein „Textblock“ /“brechen Sammlung von Anweisungen "in separate DB Engine Calls (= Batches)
+0

" a. Nur wenn jede SQL-Anweisung einzeln ausgeführt wird (etwa in SSMS oder auf dem Client). "Angenommen, ich klicke auf Microsoft SQL Server Management Studio -> Neue Abfrage-Registerkarte (öffnet ein neues Abfragefenster) und betrete dieses Abfragefenster Wenn ich zwei Anweisungen gebe, dann haben wir einen Batch? – AspOnMyNet

+0

Nur 100%, was Sie sagen: einzelne SQL-Anweisung an die DB-Engine über Microsoft gesendet Das Abfragefenster von SQL Server Management Studio wird auch innerhalb des Stapels gesendet (daher enthält dieser Stapel nur eine Anweisung)? – AspOnMyNet

+0

Mist, ich habe versucht, Ihnen einen weiteren Punkt zu geben, aber stattdessen habe ich Sie abgelehnt.Ich entschuldige mich bei – AspOnMyNet