Ответ 1
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.