Obs. - denna fråga och svaret gäller 2000-versionen av SQL Server. I senare versioner är begränsningen för INSERT INTO @table_variable ... EXEC ...
togs bort och det gäller därför inte för de senare versionerna.
Du måste byta till en tillfällig tabell:
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
Från dokumentationen:
En tabellvariabel beter sig som en lokal variabel. Den har ett väldefinierat omfång, vilket är funktionen, lagrad procedur eller batch i vilken den deklareras.
Inom dess räckvidd kan en tabellvariabel användas som en vanlig tabell. Det kan användas var som helst där ett tabell- eller tabelluttryck används i SELECT-, INSERT-, UPDATE- och DELETE-satser. Tabell får dock inte användas i följande uttalanden:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.