Tôi đã tìm kiếm trên web một số và có vẻ như cách duy nhất để có được kết quả từ XP_CMDSHELL là lưu trữ chúng vào bảng tạm thời. Có thực sự không có cách nào dễ dàng hơn?Nhận kết quả từ XP_CMDSHELL
Từ Các chuyên gia giao dịch:
Không, xp_cmdshell sẽ không trả lại bất kỳ thông tin từ exe. và bạn phải sử dụng cú pháp sau nếu bạn không ở trong cơ sở dữ liệu chính để chạy nó. master..xp_cmdshell. Bạn sẽ phải cấp cho người dùng quyền thực thi quy trình này trong cơ sở dữ liệu chính. Bạn sẽ phải có exe của bạn tự chèn thông tin vì nó không thể trả lại thông tin cho quá trình gọi nó.
Và ...
Trong khi @result chỉ nhận được giá trị trả về từ xp_cmdshell, bạn có thể nắm bắt được kết quả của lệnh bằng cách chèn trực tiếp vào một bảng ... một cái gì đó như thế này:
YMMV ...
set nocount on
declare @filepath varchar(255),
@cmd varchar(255),
@rc int
select @filepath = 'c:\temp\'
select @cmd = 'dir ' + @filepath + '~*.tmp'
create table #output (output varchar(255) null)
insert #output exec @rc = master..xp_cmdshell @cmd
select * from #output where output is not null
drop table #output