NB - dette spørgsmål og svar vedrører 2000-versionen af SQL Server. I senere versioner er begrænsningen på INSERT INTO @table_variable ... EXEC ...
blev ophævet, og det gælder derfor ikke for de senere versioner.
Du bliver nødt til at skifte til en midlertidig 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
Fra dokumentationen:
En tabelvariabel opfører sig som en lokal variabel. Det har et veldefineret omfang, som er den funktion, lagrede procedure eller batch, hvori det er deklareret.
Inden for sit omfang kan en tabelvariabel bruges som en almindelig tabel. Det kan anvendes overalt, hvor et tabel- eller tabeludtryk bruges i SELECT-, INSERT-, UPDATE- og DELETE-sætninger. Tabel må dog ikke bruges i følgende udsagn:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.