Uwaga - to pytanie i odpowiedź dotyczą wersji 2000 SQL Server. W późniejszych wersjach ograniczenie INSERT INTO @table_variable ... EXEC ...
zostały zniesione, więc nie dotyczy tych późniejszych wersji.
Musisz przełączyć się na tabelę tymczasową:
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 dokumentacji:
Zmienna tabeli zachowuje się jak zmienna lokalna. Ma dobrze zdefiniowany zakres, którym jest funkcja, procedura składowana lub partia, w której jest zadeklarowana.
W swoim zakresie zmienna table może być używana jak zwykła tabela. Może być stosowany wszędzie tam, gdzie tabela lub wyrażenie tabelowe jest używane w instrukcjach SELECT, INSERT, UPDATE i DELETE. Jednak tabeli nie można używać w następujących stwierdzeniach:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.