我的企业应用程序仅支持使用来自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
答案 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_cmdshell和sqlcmd可以执行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;