【发布时间】: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