Можно ли создать хранимую процедуру, которая перебирает другие и объединения? - PullRequest
0 голосов
/ 14 ноября 2010

У меня есть процедура в сторонней базе данных, которая называется GetDocumentHistory. Эта процедура возвращает всю информацию о документе и его истории. Эта процедура принимает DocumentId в качестве параметра - и выполняет все виды внутренней бизнес-логики. Когда это выполняется, я получаю все, что мне нужно.

Что мне нужно сделать, так это передать DocumentId, но у меня есть много DocumentIds, для которых мне нужно его запустить.

Я хочу написать свою собственную процедуру, которая принимает OwnerId, в которой я нахожу все DocumentIds, связанные с этим владельцем, и вызываю процедуру GetDocumentHistory отдельно для каждого найденного мной DocumentId. Затем я хотел бы, чтобы результаты всех выполнений процедуры GetDocumentHistory были возвращены из моей процедуры в одном большом наборе результатов.

Процедуру GetDocumentHistory нельзя легко изменить, чтобы она возвращала все эти записи, и это не просто SELECT, а множество загрузочных переменных и работа с ними.

Возможно ли зациклить и объединить результаты?

Большое спасибо за любую помощь.

1 Ответ

1 голос
/ 14 ноября 2010

Вы можете попробовать insert ... exec. Требуется указать, что именно возвращает хранимая процедура. Вот пример:

if OBJECT_ID('dbo.GetDocumentHistory') is not null
    drop procedure dbo.GetDocumentHistory
go
create procedure dbo.GetDocumentHistory(
    @DocumentId int)
as
    select  'Ghost Writer' as Author
    ,       @DocumentId as Number
go
if OBJECT_ID('dbo.GetMultiDocHistory') is not null
    drop procedure dbo.GetMultiDocHistory
go
create procedure dbo.GetMultiDocHistory(
    @a int
,   @b int)
as begin
    declare @t table (name varchar(50), number int)

    declare @i int
    set @i = @a
    while @i <= @b
        begin
        insert @t exec dbo.GetDocumentHistory @i
        set @i = @i + 1
        end

    select name, number from @t
end
go
exec dbo.GetMultiDocHistory 1, 3

Это печатает:

name             number
Ghost Writer     1
Ghost Writer     2
Ghost Writer     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...