Nazwa tabeli jako parametr w procedurze składowanej

Załóżmy, że potrzebujemy procedurę składowaną, która w zależności od zadanego parametru wyciągnie dane z tabeli podanej jako argument do procedury składowanej.
Na pierwszy rzut oka wyglądałoby, że wystarczy utworzyć procedurę postaci::

CREATE PROCEDURE getDataFromTable
@TName nvarchar(100)
AS
BEGIN
    SELECT * FROM @TName
END

@TName to argument wejściowy będący nazwą tabeli.
Jednak ta procedura spowoduje błąd postaci: Must declare the table variable „@TName”
Rozwiązanie tego problemu leży właśnie w dynamicznym SQL:)
Zatem powyższa procedura powinna mieć postać:

CREATE PROCEDURE getDataFromTable
 
@TName nvarchar(100)
AS
BEGIN
    DECLARE @query nvarchar(1000)
    SELECT @query = 'SELECT * FROM '
    SELECT @query = @query + @TName
    EXEC(@query)
END

Nazwa tabeli nadal pozostaje argumentem wejściowym. Dodatkowo w kodzie SQL-a tworzymy zmienną @query, w której umieszczamy potrzebne nam zapytanie.

  • tom

    tego potrzebowałem !