Я пишу хранимую процедуру (SQL Server), которая получает строковый аргумент, который представляет имя другой хранимой процедуры. Эта строка также содержит все сохраненные параметры, поэтому для ее запуска мне просто нужно написать EXEC @vSpCommand
.Вставка результата динамической хранимой процедуры в таблицу
Теперь моя проблема: моя процедура должна иметь дело с универсальными SP, поэтому я не знаю, как будет выглядеть таблица результатов. Значит, я не знаю, сколько столбцов имеет таблица, и тип каждого столбца.
Кроме того, внутри данного SP (@vSpCommand
) может быть другой динамический вызов для других сохраненных. Поэтому использование OPENROWSET
не будет работать. Я пробовал следующее:
SET @vSpCommand = REPLACE(@vSpCommand,'''','''''')
SET @vCmd = 'IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[TA_SpTable'[email protected]+']'') AND type in (N''U''))
DROP TABLE TA_SpTable'[email protected]+' SELECT * INTO TA_SpTable'+ @vExecId+' FROM OPENROWSET(''SQLOLEDB'', ''Server=SERVERNAME,3180;Trusted_Connection=Yes'',
''EXEC '[email protected]+ ''')'
EXEC (@vCmd)
Без каких-либо успехов.
Вопрос в том, как вставить этот результат SP в таблицу?
Если это невозможно, решение предпочтительнее в SQL, иначе использование .NET CLR также возможно.
Что вы хотите делать с этими строками, возвращаемыми вашим SP? –
Сохраните его в таблице, а затем выполните другой заданный SP, который будет работать на этой таблице. – Yuval