Jednym z ciekawszych sposobów na dzielenie danych pomiędzy procedurami jest użycie tabel tymczasowych. Rozwiązanie jest proste i skuteczne, można z niego korzystać we wszystkich sytuacjach, minusem jest utrudnione zarządzanie w przypadku gdy więcej procedur będzie korzystać z jednej tabeli tymczasowej, np chcąc zmienić kolumny trzeba będzie zmieniać je we wszystkich procedurach korzystających z danej tabeli tymczasowej.


caller: (tworzymy tabele tymczasową która jest widoczna dla innych procedur)

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE #ComputedPrice(
    Items int,
    Price money,
    Netto money,
    PriceIncVat money,
    ResDate datetime
)

EXEC [dbo].[sp_ComputePrice] @IdOrder

DROP TABLE #ComputedPrice

callee: sp_ComputePrice: (wstawiamy dane do tabeli tymczasowej)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if OBJECT_ID('tempdb..#ComputedPrice') is not null -- sprawdzamy czy tabela ComputedPrice istnieje
BEGIN
    INSERT INTO #ComputedPrice(
        Items,
        Price,
        Netto,
        PriceIncVat,
        ResDate
    )
    (SELECT    
        @Items
        ,@Price
        ,@Netto
        ,@PriceIncVat
        ,@ResDate
    )
END

caller: wybieramy interesujące nas dane

1
2
3
4
5
select Items,
    Price,
    Netto,
    PriceIncVat,
    ResDate from #ComputedPrice

Należy dodatkowo, zdawać sobie sprawę, że tabela tymczasowa jest widoczna tylko dla użytkownika, który ją stworzył i nikogo więcej. Jeśli chcielibyśmy stworzyć tabelę tymczasową, która byłaby widoczna dla wszystkich użytkowników, należałoby umieścić dwa znaki # przed nazwą tabeli

Więcej na temat współdzielenie danych między procedurami składowanymi:
http://www.sommarskog.se/share_data.html