#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 в любом случае будут указывать количество строк.