Mam kawałek dynamicznego SQL, który muszę wykonać, a następnie muszę zapisać wynik w zmiennej.
Wiem, że mogę skorzystać, sp_executesql
ale nie mogę znaleźć jasnych przykładów na to, jak to zrobić.
tsql
dynamic-sql
JohnIdol
źródło
źródło
@retvalOUT=@retval OUTPUT
? Czy trzeci parametr nie powiniensp_executesql
być sprawiedliwy@retval OUTPUT
?EXEC sp_executesql @sSQL, @ParmDefinition, @retval OUTPUT;
źródło
insert into @tab
. Jeśli spróbujeszinsert into @tab
uruchomić wiele programówexecute sp_executesql
z różnymi kodami SQL,select * from @tab
pokaże tylko wyniki pierwszego wykonaniaźródło
Zadeklaruj @variable int
Exec @variable = nazwa_proc
źródło
Zwracane wartości zasadniczo nie są używane do „zwracania” wyniku, ale do zwracania sukcesu (0) lub numeru błędu (1-65 K). Powyższe wydaje się wskazywać, że sp_executesql nie zwraca wartości, co jest niepoprawne. sp_executesql zwróci 0 w przypadku powodzenia i każdą inną liczbę w przypadku niepowodzenia.
Poniżej @i zwróci 2727
SSMS pokaże tę Msg 2727, poziom 11, stan 1, wiersz 1 Nie można znaleźć indeksu „NonExistantStaticsName”.
źródło
DECLARE @ValueTable TABLE (Wartość VARCHAR (100))
źródło
Jeśli chcesz zwrócić więcej niż 1 wartość, użyj tego:
zwrócone wartości są w @retIndex i @retText
źródło
Oto coś, czego możesz spróbować
źródło
To było dawno temu, więc nie jestem pewien, czy jest to nadal potrzebne, ale możesz użyć zmiennej @@ ROWCOUNT, aby zobaczyć, ile wierszy dotyczyło poprzedniej instrukcji sql.
Jest to pomocne, gdy na przykład konstruujesz dynamiczną instrukcję Update i uruchamiasz ją za pomocą exec. @@ ROWCOUNT pokaże, ile wierszy zostało zaktualizowanych.
Oto definicja
źródło
To działało dla mnie:
źródło