Điều này hoạt động với tôi: (tức là tôi chỉ cần 2 cột trong số 30+ được trả về sp_help_job)
SELECT name, current_execution_status
FROM OPENQUERY (MYSERVER,
'EXEC msdb.dbo.sp_help_job @job_name = ''My Job'', @job_aspect = ''JOB''');
Trước khi nó hoạt động, tôi cần chạy nó:
sp_serveroption 'MYSERVER', 'DATA ACCESS', TRUE;
.... để cập nhật sys.serversbảng. (tức là sử dụng tự tham chiếu trong OPENQUERY dường như bị tắt theo mặc định.)
Đối với yêu cầu đơn giản của tôi, tôi đã gặp phải bất kỳ vấn đề nào được mô tả trong phần OPENQUERY trong liên kết tuyệt vời của Lance.
Rossini, nếu bạn cần thiết lập động các tham số đầu vào đó, thì việc sử dụng OPENQUERY sẽ trở nên khó khăn hơn một chút:
DECLARE @innerSql varchar(1000);
DECLARE @outerSql varchar(1000);
-- Set up the original stored proc definition.
SET @innerSql =
'EXEC msdb.dbo.sp_help_job @job_name = '''+@param1+''', @job_aspect = N'''+@param2+'''' ;
-- Handle quotes.
SET @innerSql = REPLACE(@innerSql, '''', '''''');
-- Set up the OPENQUERY definition.
SET @outerSql =
'SELECT name, current_execution_status
FROM OPENQUERY (MYSERVER, ''' + @innerSql + ''');';
-- Execute.
EXEC (@outerSql);
Tôi không chắc chắn về sự khác biệt (nếu có) giữa việc sử dụng sp_serveroptionđể cập nhật sys.serverstrực tiếp bản tự tham chiếu hiện có , so với việc sử dụng sp_addlinkedserver(như được mô tả trong liên kết của Lance) để tạo một bản sao / bí danh.
Lưu ý 1: Tôi thích OPENQUERY hơn OPENWAYSET, với điều kiện là OPENQUERY không yêu cầu định nghĩa chuỗi kết nối trong Proc.
Lưu ý 2: Đã nói tất cả những điều này: thông thường tôi sẽ chỉ sử dụng CHERTN ... EXEC :) Vâng, đó là thêm 10 phút gõ, nhưng nếu tôi có thể giúp nó, tôi không muốn nói lung tung với:
(a) trích dẫn trong dấu ngoặc kép trong trích dẫn và
(b) sys bảng và / hoặc lén lút tự thiết lập Máy chủ được liên kết (ví dụ: đối với những điều này, tôi cần phải giải quyết trường hợp của mình cho các DBA toàn năng của chúng tôi :)
Tuy nhiên, trong trường hợp này, tôi không thể sử dụng cấu trúc INSERT ... EXEC, như sp_help_jobđã sử dụng một cấu trúc. ("Không thể lồng câu lệnh INSERT EXEC.")