【问题标题】:Specified cast not valid calling stored procedure指定的转换无效调用存储过程
【发布时间】:2014-09-19 21:46:13
【问题描述】:

我遇到了这个可怕的错误:“Specified cast not valid”;在通过 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);
}

【问题讨论】:

  • 直接调用存储过程是否有效?我认为您使用脚本任务是有原因的,而您本来可以使用脚本任务?

标签: sql linq ssis


【解决方案1】:

评论有点长。

存储过程返回一个状态值,它总是一个整数。所以,声明:

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

高度怀疑。这可能会解决您的错误:

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

但是,我猜这不会做你真正想要的。如果不是,请提出另一个问题并描述您要做什么。

【讨论】:

    【解决方案2】:

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

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

    工作,谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2010-11-04
      • 2012-01-15
      相关资源
      最近更新 更多