Ich habe ein Stück dynamisches SQL, das ich ausführen muss, und muss dann das Ergebnis in einer Variablen speichern.
Ich weiß, dass ich verwenden kann sp_executesql
, kann aber keine klaren Beispiele dafür finden.
tsql
dynamic-sql
JohnIdol
quelle
quelle
@retvalOUT=@retval OUTPUT
? Sollte der dritte Parametersp_executesql
nicht gerecht sein@retval OUTPUT
?EXEC sp_executesql @sSQL, @ParmDefinition, @retval OUTPUT;
quelle
insert into @tab
. Wenn Sie versuchen,insert into @tab
mehrereexecute sp_executesql
mit unterschiedlichen SQL auszuführen, werdenselect * from @tab
nur die Ergebnisse der ersten Ausführung angezeigtquelle
Deklarieren Sie @variable int
Exec @variable = proc_name
quelle
Rückgabewerte werden im Allgemeinen nicht verwendet, um ein Ergebnis "zurückzugeben", sondern um Erfolg (0) oder eine Fehlernummer (1-65 KB) zurückzugeben. Dies scheint vor allem darauf hinzudeuten, dass sp_executesql keinen Wert zurückgibt, der nicht korrekt ist. sp_executesql gibt 0 für den Erfolg und eine andere Zahl für den Fehler zurück.
Im Folgenden gibt @i 2727 zurück
SSMS zeigt diese Meldung 2727, Ebene 11, Status 1, Zeile 1 an. Der Index 'NonExistantStaticsName' kann nicht gefunden werden.
quelle
DECLARE @ValueTable TABLE (Wert VARCHAR (100))
quelle
Wenn Sie mehr als einen Wert zurückgeben möchten, verwenden Sie Folgendes:
Die zurückgegebenen Werte befinden sich in @retIndex und @retText
quelle
Hier ist etwas, das Sie ausprobieren können
quelle
Dies ist lange her, daher nicht sicher, ob dies noch benötigt wird, aber Sie können die Variable @@ ROWCOUNT verwenden, um zu sehen, wie viele Zeilen von der vorherigen SQL-Anweisung betroffen waren.
Dies ist hilfreich, wenn Sie beispielsweise eine dynamische Update-Anweisung erstellen und mit exec ausführen. @@ ROWCOUNT würde anzeigen, wie viele Zeilen aktualisiert wurden.
Hier ist die Definition
quelle
Das hat bei mir funktioniert:
quelle