Jak przekazać tabelę jako parametr do funkcji lub procedury SQL?

20-lut-2011

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
END

Teraz 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:

  1. Mobilo » Blog Archive » Jak W SQL utworzyć z rekordów listę rodzielaną przecinkami CSV? Wykorzystanie typu tablicowego napisał,

    […] 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. […]

Autor: Rafał Kraik