【问题标题】:Execute SQL Server stored procedure through SSIS通过 SSIS 执行 SQL Server 存储过程
【发布时间】:2017-11-02 14:03:20
【问题描述】:

我有这个存储过程:

CREATE PROCEDURE [dbo].[sp_Carrier_Scan_Compliance]
     (@RETAILERID  INT OUTPUT,
      @SYSTEM_ID  VARCHAR(10) OUTPUT)
AS
BEGIN
    SET @RETAILERID = 2
    SET @SYSTEM_ID = 'DMASOS'
    ...
END

我在控制流中使用执行 SQL 任务创建了一个 SSIS 包。

这些是我的执行 SQL 任务编辑器设置:

这是我的变量设置:

这些是我的参数映射设置:

当我运行 SSIS 包时,我得到一个错误:

错误:执行 SQL 存储过程时出现 0xC002F210(从“BI-Datatrunk”源表复制数据)任务,执行 SQL 任务:执行查询“exec = [sp_Carrier_Scan_Compliance]?OUTPUT,?O...”失败以下错误:“'=' 附近的语法不正确。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。

任务失败:执行 SQL 存储过程(从“BI-Datatrunk”源表复制数据)任务
警告:Carrier_Scan_Compliance_SP 处的 0x80019002:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。 Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。

我不确定我错过了什么。

请帮帮我。

谢谢

【问题讨论】:

  • 您必须将“ResultSet”从“None”设置为“full record”(或类似的东西......否则 Exec SQL Task 没有结果集......
  • @Tyron78 如果我添加它,我会遇到错误Error: 0xC00291E2 at Execute SQL Stored Procedure (to copy data from 'BI-Datatrunk' source table) Task, Execute SQL Task: There is an invalid number of result bindings returned for the ResultSetType: "ResultSetType_Rowset".
  • 从 SQL 语句中删除 exec = 的等号
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 我刚刚在一个Test DB中创建了这个过程并修改了exec sql如下:改回“Resultset none”,将SQL语句改成EXEC [sp_Carrier_Scan_Compliance] ? OUT, ? OUT。我保持不变的其余设置/正如你所描述的 - 就像一个魅力......

标签: sql sql-server tsql stored-procedures ssis


【解决方案1】:

最后一个错误的关键部分是

对象的 EXECUTE 权限被拒绝 'sp_Carrier_Scan_Compliance'、数据库 'DATAK'、架构 'dbo'。"

您需要为执行 Proc 的 SQL 用户分配 EXECUTE 权限

USE DATAK
GO
GRANT EXECUTE ON sp_Carrier_Scan_Compliance TO <sql user>
GO 

【讨论】:

  • @cool-br33ze 我可以直接通过 SSMS 执行存储过程。但如果我通过 SSIS 运行查询,则会收到错误
  • 是否在 SSMS 中以与 SSIS 包使用的 sql 用户相同的方式运行 Proc?
  • 您确认它们是同一服务器上的同一个数据库吗?检查SSIS包中数据源上的连接字符串
  • >>> 是在同一用户下
  • @cool-br33ze 是的,刚刚深入检查。我正在通过不同的用户帐户在 SSMS 中执行存储过程
猜你喜欢
  • 2010-10-29
  • 2023-04-08
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多