Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 4

Standardowo w T-SQL-u nie ma takiej możliwości. Wynik procedury składowanej nie może być użyty w klauzuli from.

Ale okazuje się, że jest kilka sposobów na rozwiązanie tego problemu:

1. Table-Value Functions

Jednym z rozwiązań jest zastąpienie procedury składowanej funkcją Table-Value Functions, czyli taką, która zwraca zmienną tablicową. 

Przykład:

 

create function MyFunc(@ProductId int) 
returns @T Table (UnitPrice decimal, Qty int)
as
begin 
	insert into @T (UnitPrice, Qty)
		select UnitPrice, OrderQty from SalesLT.SalesOrderDetail
			where ProductID = @ProductId

	return
end

 

Wówczas możemy użyć tej funkcji bezpośrednio we from:

 

select * from MyFunc(905)

 

Ograniczeniem tego rozwiązania jest to, że nie możemy tego zastosować do już istniejącej procedury składowanej.

 

2. OpenQuery

Innym sposobem jest zastosowanie funkcji OpenQuery, która umożliwia uruchomienie dowolnego kodu SQL.

 

Przykład:

 

SELECT  *  FROM    
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')
WHERE somefield = anyvalue

 Ale uwaga, zadziała tylko w przypadku Linked Server.

3. Zmienna tablicowa

Istnieje jeszcze jeden ciekawy sposób. Wyniki procedury składowanej możemy skierować do zmiennej tablicowej.

 

Przykład:

 

declare @MyTable Table (UnitPrice decimal, Qty int)

insert @MyTable exec MyStoredProc 905

Select * from @MyTable

 

4. Tabela tymczasowa

Wyniki procedury składowanej możemy skierować do tabeli tymczasowej.

 

Przykład:

 

create table #MyTable (UnitPrice decimal, Qty int)

insert #MyTable exec MyStoredProc 905

Select * from #MyTable
  • Odpowiedział
  • @ | 01.10.2014
  • TRENER ALTKOM AKADEMII
Komentarze