2017-10-24 6 views
0

Ein gemeinsames Muster, das ich sehe, ist:Verwenden Sie die Option "Nach [Datenbankname] verwenden?".

USE Name_Of_My_Database 
GO 

Soweit ich sagen kann, es keinen Sinn dafür ist, oder? Ich habe versucht, die Antwort in den Orten unten aufgeführten suchen, und es ist abwesend:

What is the use of GO in SQL Server Management Studio & Transact SQL?

In SQL Server, when should you use GO and when should you use semi-colon ;?

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/sql-server-utilities-statements-go

Edit: Nein, es ist kein Duplikat, diese Frage ist spezifischer - Ich habe die Informationen, die ich in der verknüpften Frage brauchte, nicht gefunden, obwohl ich sie vor der Veröffentlichung gelesen habe.

+0

Mögliche Duplikate von [Was ist die Verwendung von GO in SQL Server Management Studio und Transact SQL?] (Https://stackoverflow.com/questions/2299249/what-is-the-use-of-goin-in- sql-server-management-studio-transact-sql) – scsimon

Antwort

3

Es gibt zwei große Unterschiede zwischen GO und ;:

  1. GO das Skript in verschiedenen Chargen aufteilt.
  2. ; ist ein Anweisungsterminator.

GO nach einem USE DatabaseName Verwendung ist notwendig, wenn die folgende Anweisung es erfordert die erste Anweisung in einer Charge zu sein. Als Beispiel wird der folgende Code fehlschlagen:

Use SomeDatabase 

Create Procedure spSomeProcedure 
As Begin 
    Select 1 
End 

Msg 111, Ebene 15, Status 1, Prozedur spSomeProcedure, Zeile 4
'CREATE/ALTER PROCEDURE' muss die erste Anweisung in einem Abfragebatch sein .

Aber das Hinzufügen eines GO zwischen ihnen wird die Aussage erlauben auszuführen:

Use SomeDatabase 
Go 

Create Procedure spSomeProcedure 
As Begin 
    Select 1 
End 

Befehl (e) erfolgreich abgeschlossen.

+0

Ich würde auch feststellen, dass go ist ein SSMS-Befehl, den Sie ändern können, was immer Sie wollen. – scsimon

0

Ich habe meine SSMS Scripting Options so eingestellt, dass sie keine USE-Anweisungen schreiben. Ich finde sie im Allgemeinen auch sinnlos.

"GO" ist kein SQL-Befehl, es ist nur ein Stapeltrennzeichen ... es ist eine SSMS-Funktion (oder ISQL/OSQL-Funktion), keine SQL Server-Funktion. Auf diese Weise kann eine Textdatei mehrere SQL-Stapel enthalten, die an SQL Server gesendet werden.

+0

Soweit ich sagen kann, ist 'USE Whatever_Db' nur eine Annehmlichkeitserklärung, um später nicht den vollständigen Pfad schreiben zu müssen, z.B. 'dbo.My_Table' anstelle von' Whatever_Db.dbo.My_Table'. – VSO

+0

Ich verwende buchstäblich nie "USE" -Anweisungen in Skripten. Es sperrt das Skript auf eine Datenbank, was bedeutet, wenn Sie gehen und versuchen, es auf einem anderen auszuführen, wird es nicht gegen diese Datenbank ausgeführt, sondern die in der USE-Anweisung ..., die nicht intuitiv sein kann und zu schwer zu führen -Finden Sie Fehler und Probleme. Ich benutze das Dropdown-Menü, um die Datenbank auszuwählen, auf der ich ein Skript ausführen möchte."USE" nützt mir überhaupt nichts. Tatsächlich verbiete ich es in unseren Skripten. – pmbAustin

+0

Ich habe nie ein USE in meinen Skripten, aber ich benutze es, wenn ich arbeite. Es ist einfacher für mich, das dann zu stoppen und die Maus zu greifen, um die Datenbank auszuwählen, die ich verwenden möchte. :) –

Verwandte Themen