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

Откуда: Запорожье
Сообщений: 54120
есть ХП
там простой запрос
возвращает от одной до трех строк
хочу получить из первой строки значение и сделать с ним какую-то обработку
ALTER PROCEDURE [dbo].[SP](@p_out int)
AS

begin
      select *
      from tbl
      order by 1

    set @p_out = <получить из первой строки предыдущего запроса ид>;

end;
могу записать во времянку и т.д.

других методов нету?
2 июл 19, 13:16    [21918957]     Ответить | Цитировать Сообщить модератору
 Re: хп селект повторно  [new]
aleks222
Member

Откуда:
Сообщений: 919
ALTER PROCEDURE [dbo].[SP](@p_out int)
AS

begin

begin transaction;

      select *
      from tbl
      order by 1;

      select top(1) @p_out = ид
      from tbl
      order by 1;

commit transaction;

end;
2 июл 19, 13:20    [21918967]     Ответить | Цитировать Сообщить модератору
 Re: хп селект повторно  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54120
aleks222,

ок, понятно
2 июл 19, 13:21    [21918970]     Ответить | Цитировать Сообщить модератору
 Re: хп селект повторно  [new]
invm
Member

Откуда: Москва
Сообщений: 9270
andreymx,

create table dbo.t (id int);
go

create procedure dbo.p
 @id int output

as
begin

 update t
  set
   @id = first_id
 output
  inserted.id
 from
  (select top (1000000) id, first_value(id) over (order by id) from dbo.t order by id) t(id, first_id);

end;
go

declare @id int;

insert into dbo.t values (3), (1), (2);
exec dbo.p @id output;
select @id;
go

drop procedure dbo.p;
drop table dbo.t;
go
2 июл 19, 14:01    [21919017]     Ответить | Цитировать Сообщить модератору
 Re: хп селект повторно  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54120
invm
andreymx,

create table dbo.t (id int);
go

create procedure dbo.p
 @id int output

as
begin

 update t
  set
   @id = first_id
 output
  inserted.id
 from
  (select top (1000000) id, first_value(id) over (order by id) from dbo.t order by id) t(id, first_id);

end;
go

declare @id int;

insert into dbo.t values (3), (1), (2);
exec dbo.p @id output;
select @id;
go

drop procedure dbo.p;
drop table dbo.t;
go
спасибо, попробую
2 июл 19, 15:01    [21919088]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить