N.B. - câu hỏi và câu trả lời này liên quan đến phiên bản 2000 của SQL Server. Trong các phiên bản mới hơn, hạn chế đối với INSERT INTO @table_variable ... EXEC ...
đã được dỡ bỏ và vì vậy nó không áp dụng cho các phiên bản sau này.
Bạn sẽ phải chuyển sang bảng tạm thời:
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
Từ tài liệu:
Một biến bảng hoạt động giống như một biến cục bộ. Nó có một phạm vi được xác định rõ ràng, là hàm, thủ tục được lưu trữ hoặc lô mà nó được khai báo.
Trong phạm vi của nó, một biến bảng có thể được sử dụng như một bảng thông thường. Nó có thể được áp dụng ở bất kỳ đâu một bảng hoặc biểu thức bảng được sử dụng trong các câu lệnh SELECT, INSERT, UPDATE và DELETE. Tuy nhiên, bảng có thể không được sử dụng trong các câu lệnh sau:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.