Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить данные из хранимой процедуры программным путем?  [new]
mroff
Member

Откуда:
Сообщений: 4
Добрый день!

Прошу подсказать, каким образом можно программным путем получить результаты выполнения системной хранимой процедуры?

Конкретно мне необходимо программно обрабатывать результаты выполнения хранимой процедуры sp_replmonitorhelpsubscription базы distribution для автоматического отлавливания поломавшихся репликаций.

Результат, который бы меня устроил - передавать результат выполнения процедуры в таблицу, из которой я потом смог бы SELECT.

Заранее спасибо.
26 янв 12, 15:49    [11976793]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
mroff, а процедуру вы как вызываете?
26 янв 12, 16:13    [11977056]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
mroff
Member

Откуда:
Сообщений: 4
Shakill, пока никак не вызываю.

Выполняю команду:

exec sp_replmonitorhelpsubscription @publisher = N'servername', @publication_type = 0
26 янв 12, 16:18    [11977107]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
mroff,

insert into MyTable
exec sp_replmonitorhelpsubscription ...


например
26 янв 12, 16:20    [11977128]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
mroff
Member

Откуда:
Сообщений: 4
Shakill, видимо это работает для сферической процедуры в вакууме, но в моем случае почему-то нет.

Создаю таблицу с такими же полями, какие выдает sp_replmonitorhelpsubscription:

CREATE TABLE #Result
(
  status int,
  warning int,
  subscriber sysname,
  subscriber_db sysname,
  publisher_db sysname,
  publication sysname,
  publication_type int,
  subtype int,
  latency int,
  latencythreshold int,
  agentnotrunning int,
  agentnotrunningthreshold int,
  timetoexpiration int,
  expirationthreshold int,
  last_distsync datetime,
  distribution_agentname sysname,
  mergeagentname sysname,
  mergesubscriptionfriendlyname sysname,
  mergeagentlocation sysname,
  mergeconnectiontype int,
  mergePerformance int,
  mergerunspeed float,
  mergerunduration int,
  monitorranking int,
  distributionagentjobid binary(16),
  mergeagentjobid binary (16),
  distributionagentid int,
  distributionagentprofileid int,
  mergeagentid int,
  mergeagentprofileid int
)


И пытаюсь вставить в нее данные:

INSERT INTO #Result EXEC sp_replmonitorhelpsubscription @publisher = N'ServerName', @publication_type = 0


Получаю следующую ошибку:

Msg 213, Level 16, State 7, Procedure sp_replmonitorhelpsubscription, Line 375
Column name or number of supplied values does not match table definition.
26 янв 12, 16:49    [11977433]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
mroff, расковыряйте процедуру и создайте на основе нее свою.
26 янв 12, 16:52    [11977462]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
mroff
Member

Откуда:
Сообщений: 4
kDnZP, начинаю склоняться к этому же. Однако процедура дюже сложная, пока зубы ломаю.

Может есть какой-то способ попроще, чтобы автоматически ошибки репликации отлавливать?
26 янв 12, 17:02    [11977564]     Ответить | Цитировать Сообщить модератору
 Re: Как получить данные из хранимой процедуры программным путем?  [new]
user89
Member

Откуда:
Сообщений: 2083
mroff,

Результат хранимки можно сразу в новую таблицу:
if object_id('tempdb..#t') is not null drop table #t
select t.* into #t from openquery(MyServer,'sp_who') as t
select * from #t

-- Информация о столбцах нашей временной таблицы
select * from tempdb.sys.columns
where OBJECT_ID = object_id('tempdb..#t')
26 янв 12, 17:06    [11977598]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить