Może się zdarzyć, że procedura składowana ma pracować na danych znajdujących się w zmiennej będącej tabelą. Taką tabelę można przekazać do funkcji UDF lub procedury składowanej jako parametr.
Najpierw utworzymy specjalny TYP. Ten typ definiuje zmienne typu TABLE. Potem deklarujemy zmienną tego typu i już można wstawiać do niej rekordy i wyświetlać je:
CREATE TYPE TableType AS TABLE(LocationName VARCHAR(50))
GO DECLARE @myTable TableType INSERT INTO @myTable(LocationName) VALUES(’aaa’) SELECT * FROM @myTable
Aby utorzyć procedurę, która na wejściu otrzyma tę tabelę jako parametr musisz jasno zdefiniować, że przekazywana zmienną tabela jest READONLY:
CREATE FUNCTION Example( @TableName TableType READONLY) RETURNS VARCHAR(50) AS BEGIN DECLARE @name VARCHAR(50) SELECT TOP 1 @name = LocationName FROM @TableName RETURN @name ENDTeraz pozostaje skorzystać z tej funkcji
DECLARE @myTable TableType INSERT INTO @myTable(LocationName) VALUES(’aaa’) SELECT * FROM @myTable SELECT dbo.Example(@myTable)W ten sposób przekazałeś do funkcji tabelę, a otrzymujesz wartość skalarną.
Komentarze:
[…] A teraz zróbmy coś jeszcze innego. Przygotujemy ‘uniwersalną funkcję’, która z rekordów zawierających jakiś symbol utworzy listę CSV. Skorzystamy z funkcji, która jako parametr przyjmie tabelę z symbolami. Tak jest – parametrem os SQL 2008 może być tabela (zobacz więcej na mobilo/mobilo24 tutaj. […]