Я занят попыткой переписать некоторые хранимые процедуры/функции PostgreSQL для SQLQL 2014s TSQL.Процедура TSQL, возвращающая несколько строк данных
Я изо всех сил пытаюсь вернуть свои значения из этой хранимой процедуры, но это всего лишь тест, но я пытаюсь вернуть несколько строк данных в этом случае для двух переменных si_code и co_desc.
У меня есть процедура следующим образом (в качестве теста)
if (object_id('p_get_serial')) is not null
drop procedure p_get_serial
go
create procedure p_get_serial(@par01 char(20), @par02 integer)
as
declare
@co_num integer,
@co_desc char(20),
@si_code char(20),
@log char(40)
declare mycur cursor for
select co_num, co_desc
from colours
where co_num <= @par02
open mycur
fetch next from mycur into @co_num,
@co_desc
while @@FETCH_STATUS = 0
begin
set @si_code = ''
select @si_code = si_code
from sitems
where si_co_num = @co_num
set @log = @co_desc + ' ' + @si_code
raiserror(@log,0,1) with nowait
fetch next from mycur into @co_num, @co_desc
end
close mycur deallocate mycur
go
exec p_get_serial @par01 = 'paramater01', @par02 = 10
, что это лучший способ, чтобы вернуть мои результаты, зная, что там будет несколько строк?
Вы должны показать свою таблицу ввода и желаемый результат, похоже, что вы не должны использовать курсор вообще (они являются последним средством). Каково намерение безусловного расизма? –
в этом примере мне не нужен курсор, это просто тест, реальная процедура слишком сложна, чтобы обойтись без курсора. – Trent
Вы также можете рассмотреть функцию, которая выводит таблицу. Но если SP - единственный способ - создать/определить переменную таблицы и вывести ее в конце sp. Кроме того - обычно курсоры являются «плохими» в sql-сервере (низкая общая производительность). Если вы можете найти способ избежать курсоров, вы получите лучшую производительность. – ripvlan