NB - deze vraag en het antwoord hebben betrekking op de 2000-versie van SQL Server. In latere versies is de beperking op INSERT INTO @table_variable ... EXEC ...
zijn opgeheven en is dus niet van toepassing op die latere versies.
Je moet overschakelen naar een tijdelijke tabel:
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
Uit de documentatie:
Een tabelvariabele gedraagt zich als een lokale variabele. Het heeft een goed gedefinieerd bereik, wat de functie, opgeslagen procedure of batch is waarin het wordt gedeclareerd.
Binnen zijn bereik kan een tabelvariabele worden gebruikt als een gewone tabel. Het kan overal worden toegepast waar een tabel of tabeluitdrukking wordt gebruikt in SELECT-, INSERT-, UPDATE- en DELETE-instructies. De tabel mag echter niet worden gebruikt in de volgende uitspraken:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.