2010-09-30 2 views
2

Приложение для моих предприятий поддерживает только отчетность с выбранными данными с SQL-сервера. В одном бизнес-процессе у меня очень сложная хранимая процедура, в которой используются другие хранимые процедуры, и она была предназначена для печати результатов в виде журнала Работа выполнена. Я хочу поймать эту распечатку и выбрать ее как varchar (max), чтобы мое приложение могло обрабатывать эти данные и показывать пользователю.
Вот пример сценарий, описанный в TSQL коде:SQL select print out results of stored procedure

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 

ответ

1

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

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 
+0

Thanx, Это тоже, на мой взгляд, я был обруча, так что есть другой более простой способ, то обработка вывода параметров. Поэтому мне теперь нужно обрабатывать все данные распечатки, с новыми строками, error_messages и другими – adopilot

0

Существует также один грубый и, вероятно, 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; 
Смежные вопросы