Вы можете вызвать хранимую процедуру из другой, используя следующий синтаксис:
ALTER PROCEDURE [dbo].[getLogsByTagName]
-- Add the parameters for the stored procedure here
@TAG nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT TOP 1000
LOG_ID --somehow store this and execute the dbo.getLogByLogId procedure here
FROM dbo.LOG_TAG a
WHERE a.TAG = @TAG
-- Execute dbo.getLogByLogId stored procedure
DECLARE @logId INTEGER
SET @logId = <some value>
EXEC dbo.getLogByLogId @logId
END
Однако трудная часть вашего вопроса заключается в том, что ваша процедура dbo.getLogByLogId может принимать только один параметр LogID и, следовательно, сможет возвращать только одну запись журнала. Вам необходимо вернуть информацию для всех журналов, в которых для LogId имеется соответствующая запись в таблице тегов.
Правильный способ сделать это - присоединиться к таблицам Log и Tag вместе, вот так:
SELECT *
FROM dbo.LOG_TAG a
INNER JOIN dbo.LOG b ON a.LOG_ID = b.LOG_ID
WHERE a.TAG = @TAG
Если вы хотите вернуть один и тот же logId несколько раз, вы можете использовать ключевое слово DISTINCT в операторе SELECT, чтобы отфильтровать дублированные logIds.
Вы также можете переписать вашу процедуру dbo.getLogByLogId как пользовательскую функцию (UDF). Пользовательские функции могут принимать таблицу в качестве параметра и возвращать результат таблицы.
Введение в пользовательские функции можно найти в этой статье .