2014-09-30 94 views
0

我们有客户端运行SQL Server 2008 RC直到SQL Server 2014,并且该应用程序迄今为止版本不可知。在SQL Server 2008存储过程中隐藏exec输出

我遇到了一些问题,从存储过程返回响应,然后运行SSIS包。

的SQL Server 2012+

EXEC [SSISDB].[catalog].[create_execution] 
    @package_name = N'packagename.dtsx', 
    @execution_id = @execution_id OUTPUT, 
    @folder_name = N'folder', 
    @project_name = N'myProject', 
    @use32bitruntime = False, 
    @reference_id = Null 

EXEC [SSISDB].[catalog].[start_execution] @execution_id 

这是无声的,没有返回输出所以只能返回我们的SELECT

YET

在旧版本SSISDB没有写,你必须运行一个老式Exec的。

declare @cmd varchar(5000) 
set @cmd = 'DTEXEC /DTS "\MSDB\Import\PackageName" ' 
EXEC @status = xp_cmdshell @cmd 

这是非常详细的吐出所有的SSIS包信息。

微软(R)的SQL Server执行包实用工具
版本10.50.4000.0 64位
版权所有(C)微软公司2010年保留所有权利。

入门:15时03分50秒
进展情况:2014年9月30日15:03:50.36
来源:导入文件到临时表
验证:0%完成
结束进度
进展时间:2014年-09-30 15:03:50.36
来源:导入文件到临时表
验证:完成25%
结束进度 进展情况:2014年9月30日15:03:50.39

那里因为我不能映射一个单一的实体框架存储过程,因为答案不同。

我该如何让Exec保持沉默?

我试过SET NOCOUNT ON,但这不是问题,它是Exec(SSIS)的实际“输出”。

在低于2012的版本上运行时,我可能会将过程的运行放在单独的过程中,但这看起来有点矫枉过正,只是为了使exec非冗长而已。

+0

另一件需要注意的事情是,人们仍然可以在2012/2014中使用Package部署模型,因此您可能无法在版本及其执行模型之间划清界限。除非你正在控制这些包裹的交付,然后我会把我的头埋在沙子里 – billinkc 2014-09-30 15:14:50

+0

@billinkc我们有一个部署团队,一切都是管理的。可悲的是我们无法控制我们的客户端软件。 – Oli 2014-09-30 15:59:08

回答

0

我只需要返回2个字段,所以我使用它们作为输出参数。这对将来会产生更多输出或收集的过程会很恼人;尽管现在很好。

存储过程PARAMS

(
    @schemaId int, 
    @companyCode char(2), 
    @companyName nvarchar(100), 
    @transactionId nvarchar(15) OUTPUT, 
    @RtnStatus int OUTPUT 

实体查询

ObjectParameter rtnStatus = new ObjectParameter("RtnStatus", typeof(int?)); 
ObjectParameter transactionId = new ObjectParameter("TransactionId", typeof(string)); 
_dataContext.spFixedWidthDataImportSSIS(schemaId, companyCode, companyName, rtnStatus, transactionId).FirstOrDefault(); 
DataToolsTransactionDto dto = new DataToolsTransactionDto((int?)rtnStatus.Value, transactionId.Value.ToString()); 

这确实似乎是一个抽象的方法只是用来掩饰从DTEXEC一些输出数据虽然。

0

告诉dtexec安静即可;)

DTEXEC /DTS "\MSDB\Import\PackageName" /REP N 

/REP N表示希望发生任何报告。

这仍然会生成文本的最小量虽然

Microsoft (R) SQL Server Execute Package Utility 
Version 10.50.4319.0 for 32-bit 
Copyright (C) Microsoft Corporation 2010. All rights reserved. 

Started: 9:53:28 AM 
DTExec: The package execution returned DTSER_SUCCESS (0). 
Started: 9:53:28 AM 
Finished: 9:53:29 AM 
Elapsed: 1.045 seconds 

你可以尝试将输出重定向到一个文件与>但我似乎记得有被一些wonkiness与方法时,通过运行xp_cmdshell。

​​
+0

迄今为止这么近。了解/ REP N很棒,但只要它存在,映射就会失败。尽管谢谢,但我会研究输出到文件。 – Oli 2014-09-30 15:02:28

相关问题