指定的强制转换无效调用存储过程

时间:2014-09-19 11:34:08

标签: sql linq ssis

我遇到了这个恶魔般的错误:“指定演员无效”;通过Linq调用存储过程。

SET NOCOUNT ON;
declare @packagename VARCHAR(100)
declare @servername VARCHAR(100)
SET @packagename = 'PackageName'
SET @servername = 'servername'
DECLARE @ssisstr varchar(8000) 

set @ssisstr = 'C:\"Program Files (x86)"\"Microsoft SQL Server"\100\DTS\Binn\dtexec /sql ' + @packagename + ' /ser ' + @servername + ' ';

----now execute dynamic SQL by using EXEC. 

declare @returncode nvarchar(100)

EXEC @returncode = xp_cmdshell @ssisstr;

select @returncode  

返回看起来像一个包含一列和内容的表:

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

存储过程调用看起来像

using (DataContext context = new DataContext (connection))
{
       var returncode = context.StoredProcedure(packagname,servername);
}

2 个答案:

答案 0 :(得分:2)

评论时间有点长。

存储过程返回状态值,该值始终为整数。所以,声明:

declare @returncode nvarchar(100)
EXEC @returncode = xp_cmdshell @ssisstr;

非常怀疑。这可能会解决您的错误:

declare @returncode int;
EXEC @returncode = xp_cmdshell @ssisstr;

然而,我猜这不会做你真正想要的。如果没有,请提出另一个问题并描述您的目的。

答案 1 :(得分:0)

整数返回类型是可接受的解决方案。代码也缺少以下no_output参数:

DECLARE @returncode int
EXEC @returncode = xp_cmdshell @ssisstr, no_output;
select @returncode

工作,谢谢!