Temat: dynamic TSQL

Witam,
Pisząc procedurę potrzebna była mi zmienna przechowywująca rezultat wykonanego dynamicznego kodu sql. Otóż taki poniższy kod, nie przypisuje wyniku zapytania dynamicznego zmiennej @retval, a powinien. Szperałem troche w internecie i to wlasnie powinno byc dobrym rozwiazaniem. W przypadku odczytania wartośi zmiennej @retval okazuje się iz posiada ona wartość null. Zastanawiający jest fakt tymbardziej iż już kilka razy natknąłem się na takie rozwiązanie, które powinno z zasady działać? Może ktoś ma jakiś pomysł, lub zetknął się z taką sytuacją?

declare
@cmd nvarchar(max),
@retval int,
@ParmDefinition nvarchar(500),
@nazwa_tabeli nvarchar(100)
select @nazwa_tabeli=N'test_table'
SET @ParmDefinition = N'@retvalOUT int OUTPUT';
select @cmd=N'select max(id) from '+@nazwa_tabeli
EXECUTE sp_executeSQL @cmd,@ParmDefinition,@retvalOUT=@retval OUTPUT
select @retval
go


Z góry dziękuję za zainteresowanie się tematem :)
Pozdrawiam.
Jacek Szarapa

Jacek Szarapa Project Manager,
Software Developer

Temat: dynamic TSQL

tak będzie lepiej:

declare
@cmd nvarchar(max),
@retval int,
@ParmDefinition nvarchar(500),
@nazwa_tabeli nvarchar(100)

select @nazwa_tabeli=N'test_table'
SET @ParmDefinition = N'@retvalOUT int OUTPUT';
select @cmd=N'select @retvalOUT = max(id) from '+@nazwa_tabeli
print @cmd
EXECUTE sp_executeSQL @cmd,@ParmDefinition,@retvalOUT=@retval OUTPUT
select @retval

---
zwracam uwagę na zmianę w zapytaniu budującym selecta do wykonania. Generalnie sprowadza się do tego, że chcesz pobrać wartość zmiennej, której właściwie nigdzie nie przypisujesz wartości...

Temat: dynamic TSQL

dzięki za pomoc :)

Następna dyskusja:

SQL Server Dynamic Manageme...




Wyślij zaproszenie do