N.B. - този въпрос и отговор се отнасят до версията на SQL Server от 2000 г. В по-късни версии ограничението за INSERT INTO @table_variable ... EXEC ...
бяха премахнати и затова не важи за тези по-късни версии.
Ще трябва да превключите към временна таблица:
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
От документацията:
Таблица променлива се държи като локална променлива. Той има добре дефиниран обхват, който е функцията, съхранената процедура или партидата, в която е деклариран.
В рамките на своя обхват променлива на таблица може да се използва като обикновена таблица. Може да се прилага навсякъде, където се използва израз на таблица или таблица в изрази SELECT, INSERT, UPDATE и DELETE. Въпреки това таблицата може да не се използва в следните изрази:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.