drop und erstellen Sie SQL Server-Prozedur
Ich versuche zu löschen und erstellen Sie eine Prozedur in einem einzigen Skript. Ich versuchte dies:
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo')
DROP PROCEDURE Foo
GO
CREATE PROCEDURE dbo.Foo
-- procedure body here
Aber ich bekomme eine Fehlermeldung:
Falsche syntax in der Nähe 'GEHEN'.
Wenn ich entfernen GO
bekomme ich einen Fehler:
'CREATE/ALTER PROZEDUR' muss die erste Anweisung in einem abfragebatch sein
Update
Diese Skripte werden ausgeführt, indem ein Java-build-Werkzeug (Maven)
sollte man das nicht DROP PROCEDURE foo?
danke, ich habe es korrigiert
ist dies in SSMS, oder versuchen Sie, auszuführen, die außerhalb der es wie in einem Java-client?
Wären Sie in der Lage zu erklären, was höhere Ebene problem, das Sie versuchen zu lösen mit Maven und diese SQL-Befehle?
danke, ich habe es korrigiert
ist dies in SSMS, oder versuchen Sie, auszuführen, die außerhalb der es wie in einem Java-client?
Wären Sie in der Lage zu erklären, was höhere Ebene problem, das Sie versuchen zu lösen mit Maven und diese SQL-Befehle?
InformationsquelleAutor Dónal | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
GO
ist nicht wirklich ein Gültiger Begriff in T-SQL, es ist lediglich das Trennzeichen an, das die Microsoft-management-tools verwenden, um zu begrenzen Abfrage-Chargen.Was verwenden Sie, um das Skript auszuführen? Wenn Sie versuchen, es im code dann müssen Sie es aufgeteilt in zwei statements, die vielleicht über eine regex, split auf
^GO$
ja, es ist
+1 Jon für das richtige erraten.
InformationsquelleAutor Jon Grant
Der einfachste Weg, die ich gefunden habe, für die Ausführung der großen Skripts außerhalb SSMS von einem tool zu verwenden, die SQLCMD. (iSQL pre-sql 2005), Dies funktioniert mit jeder Umgebung, können Sie einen shell-Befehl.
Aus dem MSDN-Artikel
InformationsquelleAutor Conrad Frix
Versuchen
Dies ist, wie ich es tun, ich bin mir nicht sicher, welche version von SQL SERVER meine Arbeit verwendet, ich glaube, 2005.
InformationsquelleAutor Damon
Wäre es besser, verwenden Sie die folgende syntax für die Existenz-check:
Wie geschrieben, wenn es ein foo sproc in jedem schema würde es versuchen, es fallen zu lassen. Nicht sicher, ob das wird Ihr problem Weg obwohl. Wenn Sie mit SSMS, es gibt eine option, um ein Skript für eine gespeicherte Prozedur löschen und ERSTELLEN; diese syntax sollte funktionieren.
InformationsquelleAutor SqlACID
Überprüfen Jon Galloway ' s post: Umgang mit "GO" Separatoren in SQL-Skripts - der einfache Weg
Könnte es die Antwort, die Sie suchen.
InformationsquelleAutor Timothy Lee Russell