Учитывая хранимую процедуру на SQL Server с несколькими операторами select
, существует ли способ работать с этими результатами отдельно при вызове процедуры?Извлечь данные из хранимой процедуры, которая имеет несколько наборов результатов
Например:
alter procedure dbo.GetSomething
as
begin
select * from dbo.Person;
select * from dbo.Car;
end;
В .NET, если я называю этот процедурный, я могу использовать SqlDataReader
для перемещения между двумя наборами результатов, так что я могу легко получить все люди и автомобили. Однако в SQL, когда я выполняю proc напрямую, я получаю оба набора результатов.
Если я называю:
insert @myTempTable
exec dbo.GetSomething;
Тогда это ошибка, так как определение столбца не совпадает. Если каким-то образом Person и Car имеют одинаковые столбцы, он объединяет их вместе, а @myTempTable получает все записи из обеих таблиц, что, очевидно, тоже не хорошо.
Я могу определить новые пользовательские типы, представляющие два набора результатов, и сделать эти выходные параметры вместо нескольких операторов select
, но мне интересно, есть ли лучший способ - каким-то образом вывести оба результата во временные таблицы, или зацикливание результатов, или что-то еще.
EDIT
На самом деле, после того, присмотревшись, даже выходные параметры таблицы не решить эту проблему - они только для чтения, и это все еще верно в SQL 2012. (Connect ticket asking for this to be added)
No. Если вы хотите работать с одним набором результатов из одной процедуры, тогда вы можете возвращать только один результирующий набор. – Kermit
Удивительно, но вы * можете * получить доступ к множеству наборов результатов из приложения ADO.NET с помощью 'SqlDataReader', как вы упомянули, но вы ** не можете ** получить доступ к множеству наборов результатов от T-SQL ..... мне никогда не было смысла , но так оно и есть (по крайней мере на данный момент). –
Скажите, что у вас есть столбец с именем «type» в таблице «Car and Person», новая таблица не может иметь 2 столбца с именем «type». Возможно, вы явно указали имена столбцов на 1 из выбранных, например. SELECT тип AS carType из автомобиля. – NoChance