Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Здравствуйте, у меня возникла проблема с результатом процедуры. В основной процедуре вложены две другие, которые в свою очередь выдают результат через SELECT - это ID-ки, а основная процедура должна отдавать последний. Программа на C# принимает результат первого SELECT-а первой процедуры, а остальные теряются. Можно ли как-то в теле процедуре исключать результаты вложенных процедур.

declare @id_year int;
declare @id_month int = 0;
declare @year nvarchar(4) = CONVERT(nvarchar(max),year(@curdate));
declare @month nvarchar(15) = DATENAME(month,@curdate);
declare @parent int = 69535;
declare @comment nvarchar(max) = '';

if (select COUNT(*) from objs where parent = @parent AND name_object = @year) = 0
  begin
	set @comment = 'Запросы за '+@year+ ' год'
	exec @id_year = dbo.UpdateObject 0,@year,@comment,0,0,@parent,0,0,0, @user
  end
else set @id_year = (select top 1 id_object from objs where parent = @parent AND name_object = @year)

if (select COUNT(*) from objs where parent = @id_year AND name_object = @month) = 0
  begin
    set @comment = 'Запросы за ' + @month;
	exec @id_month = dbo.UpdateObject 0,@month,@comment,0,0,@id_year,0,0, 0, @user
  end
  
set @id_month = (select top 1 id_object from objs where parent = @id_year AND name_object = @month)

select @id_month;


Заранее спасибо.
12 фев 15, 12:51    [17255185]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
MS SQL 2008 R2
12 фев 15, 12:52    [17255195]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
а остальные теряются.

Не теряются, а ваш клиентский код их не находит

Евгений_lea
Можно ли как-то в теле процедуре исключать результаты вложенных процедур.

И куда серверу девать этот результат ?
12 фев 15, 12:54    [17255211]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
т.е. в процедуре ничего не сделать.
12 фев 15, 12:56    [17255229]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
т.е. в процедуре ничего не сделать.

Ну так не запускайте процедуру и она не будет ничего делать
12 фев 15, 12:57    [17255236]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
SqlDataReader
берёт только первый SELECT, не знаю как взять остальные?
12 фев 15, 12:57    [17255246]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Евгений_lea
SqlDataReader
берёт только первый SELECT, не знаю как взять остальные?


взять следующий резалтсет
12 фев 15, 12:59    [17255258]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
берёт только первый SELECT, не знаю как взять остальные?

Изучать методы и свойства класса.
12 фев 15, 12:59    [17255263]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Спасибо, буду изучать C#, думал есть решение в SQL, как-то в своем роде объеденить результат.
12 фев 15, 13:04    [17255314]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
как-то в своем роде объеденить результат.

Объеденить несколько разных наборов данных в один ??
Как вы себе это представляете ?
12 фев 15, 13:07    [17255344]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Как UNION, результат один столбец INT, наверное это бред, спасибо, я вышел из ситуации через класс SqlDataReader в C#, проблема всё же теперь стоит в обновлении клиента у пользователей, поэтому хотел решить проблему через SQL.
12 фев 15, 13:14    [17255416]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
поэтому хотел решить проблему через SQL.

Ну так решайте - переписывайте свои процедуры.
12 фев 15, 13:17    [17255444]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Суть в том, что вложенные процедуры большие, чтобы их разворчивать в основной процедуре. К тому же исправлять количество столбцов таблицы проще в одной процедуре, чем в нескольких.
12 фев 15, 13:21    [17255485]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
Суть в том, что вложенные процедуры большие, чтобы их разворчивать в основной процедуре. К тому же исправлять количество столбцов таблицы проще в одной процедуре, чем в нескольких.

И что дальше ? Нужна волшебная кнопка "Сделай так" ?
12 фев 15, 13:23    [17255508]     Ответить | Цитировать Сообщить модератору
 Re: Процедура в процедуре  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Евгений_lea
Спасибо, буду изучать C#, думал есть решение в SQL, как-то в своем роде объеденить результат.

Решение есть - то, что возвращает набор данных, должно быть функцией, а не процедурой.
12 фев 15, 17:25    [17257383]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить