N.B. - tato otázka a odpověď se týkají verze 2000 SQL Server. V novějších verzích omezení na INSERT INTO @table_variable ... EXEC ...
byly zrušeny, a tak to neplatí pro tyto pozdější verze.
Budete se muset přepnout na dočasnou tabulku:
CREATE TABLE #tmp (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO #tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from #tmp
Z dokumentace:
Proměnná tabulky se chová jako lokální proměnná. Má dobře definovaný rozsah, což je funkce, uložená procedura nebo dávka, ve které je deklarována.
V rámci svého rozsahu lze proměnnou tabulky používat jako běžnou tabulku. Lze jej použít všude tam, kde je v příkazech SELECT, INSERT, UPDATE a DELETE použita tabulka nebo tabulkový výraz. Tabulka však nesmí být použita v následujících prohlášeních:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.