2012-03-30 10 views
1

Ich muss auf Variablen im gesamten Skript zugreifen, das durch den Befehl GO in wenige Abschnitte unterteilt ist. Wie geht das?Zugriff auf Variablen im gesamten SQL-Skript

Im Folgenden finden Sie Quellen Beispiel (das nicht funktioniert):

--script info (begining of script file) 
DECLARE @ScriptCode NVARCHAR (20) = '20120330-01' 

--some queries 
GO 

--and there I cannot use @ScriptCode variable 
INSERT INTO DBScriptsHistory(ScriptCode) VALUES(@ScriptCode) 

Antwort

2

Das stimmt, denn Variablen existieren nur innerhalb der aktuellen Charge. Angenommen, Sie müssen die GO-Anweisung verwenden (z. B. muss CREATE VIEW die erste Anweisung in einem Batch sein), ist die einfachste Lösung wahrscheinlich die Verwendung von sqlcmd scripting variables.

1

Entfernen Sie die GO Schlüsselwort, wird es funktionieren. Sobald Sie GO aufgerufen haben, ist die Variable nicht mehr im Gültigkeitsbereich.

2

Die Anweisung GO ist ein Stapeltrennzeichen für die verschiedenen SQL-Client-Tools - es ist nicht Teil von SQL.

Jede Charge ist getrennt von der anderen - entfernen Sie einfach die GO Anweisung.

Siehe GO (Tranasct-SQL):

Der Umfang der lokalen (benutzerdefiniert) Variablen auf eine Charge begrenzt ist, und kann nicht nach einem GO-Befehl referenziert werden.

+0

Das Entfernen von GO funktioniert in dem speziellen Fall, den das OP zeigte, aber es wird nicht im allgemeinen Fall funktionieren, da GO manchmal benötigt wird: viele (die meisten?) CREATE-Anweisungen müssen die erste Anweisung in einem Batch sein. – Pondlife

+0

Ich weiß, was für ist GO, aber wie zum Beispiel fügen Sie 2 Prozeduren ohne GO? Ich kann nicht. –

+0

@MarekKwiendacz - Dann müssen Sie Ihre Skripts überdenken. Verwenden Sie keine lokalen Variablen. – Oded

Verwandte Themen