SQL выбрать распечатать результаты хранимой процедуры

Мое деловое приложение поддерживает только отчетность с выбранными данными с SQL-сервера. В одном бизнес-процессе у меня очень сложная хранимая процедура, в которой используются другие хранимые процедуры, и она была предназначена для печати результатов в виде журнала выполненной работы. То, что я хочу поймать, распечатать и выбрать его как varchar (max), чтобы мое приложение могло обрабатывать эти данные и отображать их пользователю. Ниже приведен пример сценария, описанного в TSQL-коде:

create procedure sp_test_print_out
as
begin
 Print 'Test';
 print 'Test 1';
end
go
create procedure sp_test_print_out_to_select
as 
declare @printOut varchar(max)
set @printOut = exec sp_test_print_out --How I can achieve this ?
select @printOut
end
go
exec sp_test_print_out_to_select
2 ответа

Вы можете попробовать установить значения в выходном параметре

create procedure sp_test_print_out
@printMessages varchar(max) output
as
begin
set @printMessages='Test'
Print 'Test';
set @printMessages= @printMessages + CHAR(10)
set @printMessages= @printMessages + 'Test 1'
print 'Test 1';
end
go
create procedure sp_test_print_out_to_select
as 
begin
declare @printOut varchar(max)
exec sp_test_print_out @printOut output -- can be achieved using output parameter ?
select @printOut
end
go
exec sp_test_print_out_to_select


Существует также один грубый и, возможно, BAD способ получить выбранные данные из команд печати внутри хранимой процедуры.

Команда xp_cmdshell и sqlcmd может выполнить задание. Xp_cmdshell в основном отключен и не разрешен для использования на большинстве SQL-серверов по соображениям безопасности.

Вот код:

CREATE TABLE #temp
(OUTPUT VARCHAR(MAX));
 declare @cmd varchar(800);
 set @cmd = 'sqlcmd -d RobotTest -Q "exec sp_test_print_out"';
 INSERT INTO #TEMP
 exec xp_cmdshell @cmd ;
select output from #temp;
drop table #temp;

licensed under cc by-sa 3.0 with attribution.