ahmed_sa Ответов: 1

Как выполнить хранимую процедуру с каждой строкой временной таблицы ?


проблема
как выполнить хранимую процедуру с каждой строкой временной таблицы ?

Мне нужно выполнить storedprocedurename inputfilepath outputfilepath. это данные, существующие в базе данных на таблице Importertemplate. мне нужно получить имя хранимой процедуры после выполнения с двумя параметрами inputfilepath и outputfilepath. мне нужно сделать цикл с каждой строкой get storedprocedurename и inputfilepath и outpupath и выполнить его.

Итак, как сделать цикл внутри него и выполнить хранимую процедуру с каждой строкой'
Я могу написать его, но внутри цикла не могу этого сделать.

Что я уже пробовал:

create Proc ImporterQueue_RunModified1
As
BEGIN
WITH CTE AS
(
    SELECT Row_Number() OVER (ORDER BY GetDate()) AS rownumber, 
           StoredProcedureName, 
           ImporterQueue.CreateBy, 
           ImporterQueueID,
           applicationid, 
           dbo.ImporterTemplate.ImporterTemplateID, 
           InputFilePath, 
           OutputFilePath, 
           StoredProcedureName [ImporterTemplate.StoredProcedureName],
           RN = ROW_NUMBER() OVER (PARTITION BY applicationid ORDER BY ImporterQueueID ASC)
    FROM dbo.ImporterQueue WITH (NOLOCK) 
    INNER JOIN dbo.ImporterTemplate WITH (NOLOCK)  ON dbo.ImporterQueue.ImporterTemplateID = dbo.ImporterTemplate.ImporterTemplateID
    INNER JOIN Privilages.Module ON dbo.ImporterTemplate.ModuleID = Privilages.Module.ModuleID
    WHERE dbo.ImporterQueue.IsDeleted = 0 
    AND dbo.ImporterQueue.OverAllStatusID = 1 
)
SELECT rownumber , 
       RN , 
       ImporterQueueID,
       CreateBy,
       StoredProcedureName,
       InputFilePath,
       OutputFilePath
 INTO #results   FROM    CTE
    WHERE   RN = 1;

IF (
       SELECT OverAllStatusID 
       FROM dbo.ImporterQueue 
       INNER JOIN #results ON ImporterQueue.ImporterQueueID = #results.ImporterQueueID) <> 1 -- Pending
RETURN;
//here i need to write 
EXEC storedprocedurename inputfilepath outputpath
END

#realJSOP

О каком SQl мы говорим? Sql Server? MySql? SomeOtherF*ckedUpSQL?

ahmed_sa

sql server 2012

1 Ответов

Рейтинг:
2

MadMyche

Хотя это не то, что я обычно рекомендую; это может быть просто проще всего использовать CURSOR для этого приложения.
Это примерный пример того, как это может выглядеть, нужно использовать соответствующие типы переменных/размеры и выяснить, что это такое. ВЫБИРАТЬ утверждение на самом деле будет; так что считайте это отправной точкой

DECLARE @Input NVARCHAR(64)
DECLARE @Ouput NVARCHAR(64)

DECLARE rs CURSOR LOCAL STATIC FOR
	SELECT InputFilePath, OutputFilePath
	FROM   #results
	WHERE  -- to be determined by you
	FOR READ ONLY

	OPEN rs
		FETCH rs INTO @Input, @Output
		WHILE (@@Fetch_Status = 0) BEGIN
			EXECUTE ProcedureName @Input, @Ouput
			FETCH rs INTO @Input, @Output
		END
	CLOSE rs
DEALLOCATE rs


Afzaal Ahmad Zeeshan

Курсор также был чем-то, о чем я думал, читая первые несколько строк кода.

5ед.