N.B. - pertanyaan dan jawaban ini berhubungan dengan SQL Server versi 2000. Di versi yang lebih baru, pembatasan pada INSERT INTO @table_variable ... EXEC ...
dicabut sehingga tidak berlaku untuk versi yang lebih baru.
Anda harus beralih ke tabel sementara:
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
Dari dokumentasi:
Sebuah variabel tabel berperilaku seperti variabel lokal. Ini memiliki ruang lingkup yang terdefinisi dengan baik, yang merupakan fungsi, prosedur tersimpan, atau batch di mana ia dideklarasikan.
Dalam ruang lingkupnya, variabel tabel dapat digunakan seperti tabel biasa. Ini dapat diterapkan di mana saja tabel atau ekspresi tabel digunakan dalam pernyataan SELECT, INSERT, UPDATE, dan DELETE. Namun, tabel tidak boleh digunakan dalam pernyataan berikut:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.