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

#sql #sql-server #tsql

Вопрос:

Я пытаюсь исправить хранимую процедуру, которую мы создали для подсчета количества запущенных процедур с определенным именем.

Я пытаюсь получить количество запущенных хранимых процедур, соответствующих определенному названию, и это прекрасно работает, когда Хранимая процедура, выполняющая запрос, находится в той же базе данных, что и процедуры, которые я пытаюсь считать запущенными. Но я не понимаю, как я могу подсчитать количество запущенных процедур, соответствующих имени, запущенному в другой базе данных. Я предполагаю, что параметр dbid должен каким-то образом использоваться, но я не понимаю, как.

База данных, которую я хочу учитывать, называется «Запланированные задания», а не MySampleDB, в которую я должен поместить сохраненную процедуру (я не могу переместить ее в другую БД по разным причинам).

Любые предложения приветствуются. Вот мой код:

 USE [MySampleDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[sp_CheckRuns2]
  @RowsAffected INT OUTPUT
AS
BEGIN

SELECT
  object_name(st.objectid) as ProcName
FROM
  sys.dm_exec_connections as qs 
CROSS APPLY sys.dm_exec_sql_text(qs.most_recent_sql_handle) st 
WHERE
  object_name(st.objectid) is not null and OBJECT_NAME(st.objectid) like '%sp_UPDATER'
END

select @RowsAffected = @@rowcount

RETURN @RowsAffected
 

Ответ №1:

Просто передайте в dbid качестве дополнительного параметра

 WHERE OBJECT_NAME(st.objectid, st.dbid) like '%sp_UPDATER'
 

Примечание сбоку: Вы должны удалить RETURN @RowsAffected . В этом нет необходимости, так как вы в любом случае возвращаете OUTPUT параметр. Обратите также внимание, что большинство клиентских API в любом случае будут указывать количество строк.