Tôi đang viết một thủ tục được lưu trữ trong SQL Server 2005, tại điểm đã cho, tôi cần phải thực hiện một thủ tục được lưu trữ khác. gọi đây là năng động, và do đó, tôi đã sử dụng lệnh sp_executesql như thường lệ:sp_executesql và đầu ra bảng
DECLARE @DBName varchar(255)
DECLARE @q varchar(max)
DECLARE @tempTable table(myParam1 int, -- other params)
SET @DBName = 'my_db_name'
SET q = 'insert into @tempTable exec ['[email protected]+'].[dbo].[my_procedure]'
EXEC sp_executesql @q, '@tempTable table OUTPUT', @tempTable OUTPUT
SELECT * FROM @tempTable
Nhưng tôi nhận được lỗi này:
Must declare the scalar variable "@tempTable".
Như bạn có thể thấy biến được khai báo. Tôi đã đọc số documentation và dường như chỉ có các tham số được phép là văn bản, ntext và hình ảnh. Làm thế nào tôi có thể có những gì tôi cần?
PS: Tôi đã tìm thấy nhiều mẹo cho năm 2008 và phiên bản tiếp theo, bất kỳ cho năm 2005.
được một lúc kể từ năm 2005, nhưng phạm vi các @ temptable là giới hạn đối với các thủ tục hiện hành, không phải là thủ tục executeSQL ... – Sparky
nó không có bất cứ điều gì để làm với sp_executesql. nó phải làm với phạm vi của một biến bảng. điều tiếp theo để nghĩ đến sẽ là sử dụng một bảng tạm thời, nhưng tôi khá chắc chắn rằng nó sẽ thất bại quá bởi vì sp_executesql chạy trên một thread khác nhau –