NB. - Diese Frage und Antwort beziehen sich auf die Version 2000 von SQL Server. In späteren Versionen die Einschränkung auf INSERT INTO @table_variable ... EXEC ...
wurden aufgehoben und gelten daher nicht für diese späteren Versionen.
Sie müssen zu einer temporären Tabelle wechseln:
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
Aus der Dokumentation:
Eine Tabellenvariable verhält sich wie eine lokale Variable. Es hat einen wohldefinierten Gültigkeitsbereich, der die Funktion, gespeicherte Prozedur oder den Stapel darstellt, in dem es deklariert wird.
Innerhalb ihres Gültigkeitsbereichs kann eine Tabellenvariable wie eine normale Tabelle verwendet werden. Es kann überall dort angewendet werden, wo eine Tabelle oder ein Tabellenausdruck in SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen verwendet wird. Tabelle darf jedoch nicht in den folgenden Anweisungen verwendet werden:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.