NB - questa domanda e risposta si riferiscono alla versione 2000 di SQL Server. Nelle versioni successive, la restrizione su INSERT INTO @table_variable ... EXEC ...
sono stati revocati e quindi non si applica a quelle versioni successive.
Dovrai passare a una tabella temporanea:
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
Dalla documentazione:
Una variabile di tabella si comporta come una variabile locale. Ha un ambito ben definito, che è la funzione, la procedura memorizzata o il batch in cui è dichiarato.
All'interno del suo ambito, una variabile di tabella può essere utilizzata come una normale tabella. Può essere applicato ovunque venga utilizzata una tabella o un'espressione di tabella nelle istruzioni SELECT, INSERT, UPDATE e DELETE. Tuttavia, la tabella non può essere utilizzata nelle seguenti istruzioni:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.