我遇到了这个恶魔般的错误:“指定演员无效”;通过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);
}
答案 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
工作,谢谢!