Итак, у меня есть sproc1
, который что-то делает и возвращает несколько строк. Важно то, что он кое-что делает. У меня также есть sproc2
, который выполняет некоторые действия, вызывает sproc1
(который выполняет свои функции) и возвращает свои собственные строки. Проблема в том, что когда я вызываю sproc2
, я получаю 2 набора результатов. Первое происходит от sproc1
, а второе - от sproc2
.
Можно ли легко подавить sproc1
при вызове в sproc2
?
Насколько я могу судить, у меня есть два способа сделать это:
- используйте временную таблицу, чтобы поймать вывод
exec sproc
. - в
C#
перейдите к последнему набору результатов и используйте его, игнорируя первый (ие).
Ни один из этих методов нельзя использовать повторно, так как:
- сначала требует от меня
CREATE
временную таблицу, которая соответствует выходным данным хранимой процедуры. - второй требует, чтобы я перебрал наборы результатов, чтобы добраться до последнего, не зная, какой из них последний, если я не попытаюсь перейти к следующему и не смогу выполнить через
.NextResult()
.
Простым способом было бы, если бы SQL Server позволял мне выполнять хранимую процедуру в другой хранимой процедуре, но подавлял бы вывод внутренней выполняющей ее. Или если SqlCommand
разрешил ExecuteReader(CommandBehavior.LastResult)
и сам перейдет к последнему результату.
Можно ли добиться любого из этих двух способов простым и многократно используемым способом?
Реальным решением было бы преобразовать внутренние хранимые процедуры в компоненты write
и read
. Или добавьте @param
во внутренние хранимые процедуры, чтобы предотвратить выбор окончательных результатов. Но я стараюсь здесь полениться!