2011-01-05 2 views
2

хранимой процедуры, которые возвращают несколько результатов:установить имя таблицы результатов в хранимой процедуре

CREATE PROCEDURE [dbo].[GetMultipleTable] 
AS 
BEGIN 

    if exists (select something from somewhere where somecondition = 1) 
    begin 
     select * from firsttable 
    end 
    select * from secondtable 
END 

при выполнении хранимой процедуры, используйте SqlDataAdapter «s Fill метода для заполнения DataSet с несколькими таблицами.

DataSet ds; 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.Fill(ds); 

Я могу получить результаты. но я думаю, что мы можем сделать лучше, чем это:

var index = 0; 
if(ds.Tables.Count > 1){ 
    DataTable first = ds.Tables[index];  
    index++; 
    // do something 
} 
DataTable second = ds.Tables[index]; 
// do something 

Мне любопытно, можем ли мы получить таблицу по имени вместо индекса. как ..

DataTable first = ds.Tables["first"]; 
// do something 
if(ds.Tables.Containts("second")) 
{ 
    DataTable second = ds.Tables["second"]; 
    // do something 
} 

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

ответ

2

Я думаю, нет. И в какой-то степени я сомневаюсь, что это хороший способ справиться с этим. Почему бы просто не возвращать пустые наборы результатов в этих случаях, чем вы всегда знаете, что означает n-й набор результатов.

Помимо случаев, когда вы делаете результаты простым текстом, вам не нужна сложная логика, вы имеете дело с различными случаями результата.

Почему вы это делаете? Мистическое желание улучшить производительность?

Для специальных запросов это может быть нормально, но для хранимых процедур. Лучше подумайте дважды.

Возможно, на мое отношение влияет тот факт, что мне пришлось преобразовать такие процедуры в Oracle и там у вас нет концепции переменного количества результирующих множеств. Для каждого набора результатов вы должны заранее указать параметр refcursor.

+1

Если невозможно назвать таблицу результатов, возврат пустого результата кажется хорошей идеей. благодарим за советы и обмен. –

+0

Да, это мистическое желание улучшить производительность. Я пытаюсь уменьшить круговое движение в/из базы данных. –

Смежные вопросы