2017-04-25 17 views
2

Ich habe eine Execute SQL task in meinem SSIS-Paket, das eine gespeicherte SQL-Prozedur nur ausführen sollte, wenn eine bestimmte Bedingung erfüllt ist.Bedingte SQL-Task ausführen in SSIS

Ich habe eine Benutzervariable [User::run], die einen Wert erhält, wenn das Paket gestartet wird. In meinem SQL-Task habe ich den folgenden Code:

declare @run varchar(1) 
set @run = '" + @[User::run] + "' 
if @run = 'Y' 
begin 
EXEC sp_procedure() 
end 

Die gespeicherte Prozedur wird jedoch nie ausgeführt. Jede Hilfe oder Vorschläge würden sehr geschätzt werden.

+1

Danke Hadi. Es funktionierte. –

Antwort

2

Das sieht aus wie ein Ausdruck kein SQL.

öffnen Execute SQL Task, gehen Sie zu Expressions Registerkarte, fügen Sie einen Ausdruck SqlStatementSource

"declare @run varchar(1) 
set @run = '" + @[User::run] + "' 
if @run = 'Y' 
begin 
EXEC sp_procedure() 
end" 

„Sie einen Ausdruck verwenden können, um die Parameterwerte in die Query-String zu verketten und die SqlStatementSource Eigenschaft der Aufgabe einzustellen. " Read more

0

Was wäre, wenn Sie die Variable [User :: run] nicht dynamisch festlegen möchten, sondern manuell festlegen. Führt es den Vorgang dann aus? Wenn ja, weißt du, dass es ein Problem beim Setzen der Variablen gibt, wenn nein, dann weißt du, dass es etwas mit der Aufgabe zu tun hat.

Gibt es einen bestimmten Grund, warum Sie eine if-Anweisung verwenden möchten, um die Prozedur auszuführen und auszuführen? Ich würde zwei Präzedenzbedingungen empfehlen. Einer leitet das Ende des Jobs an, vielleicht eine E-Mail, die besagt, dass die Ergebnisse beendet und protokolliert wurden. Der andere verweist auf die gespeicherte Prozedur.

Als Beispiel würde eine Rangfolgeneinschränkung von Ihrem ersten Schritt mit dem zweiten Schritt verbunden sein, der zweite Schritt ist Ihr exec t-sql. Die Connector-Eigenschaften würden wie unten gezeigt sein, um auszuwerten, ob die Variable korrekt eingestellt ist, und dann würde sie zu Ihrer T-SQL-Aufgabe fließen.

contraint if true

Hier ist, was der andere Stecker als auch eingestellt werden würde, wäre es auf eine andere Aufgabe fließen, eine, die das SSIS-Paket enden würde.

enter image description here

1

Stellen Sie einfach

@run = @[User::run] 

doppelte Anführungszeichen nicht fügen Sie.

Verwandte Themen