SQL选择打印出存储过程的结果

时间:2010-09-30 09:06:27

标签: sql sql-server stored-procedures

我的企业应用程序仅支持使用来自SQL Server的选定数据进行报告。在一个业务流程中,我有非常复杂的存储过程,使用其他存储过程,它被设计为打印结果作为完成工作的日志。我想要打印出来并将其选为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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

还有一种粗略的,可能是BAD的方式来从存储过程中的打印命令中获取所选数据。

命令xp_cmdshellsqlcmd可以执行JOB。由于安全原因,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;