我正在尝试通过存储过程执行SSIS程序包。
仅当参数经过硬编码(如代码的第一版中所述)时,我才能成功执行该存储过程
第一版代码:
SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx"
/SET "\Package.Variables[User::ConfigurationName].Properties[Value]";"Report1"
/SET "\Package.Variables[User::Country].Properties[Value]";"USA"
/SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";"USA"
/SET "\Package.Variables[User::Subfix].Properties[Value]";"20190503"
/SET "\Package.Variables[User::TeamName].Properties[Value]";"Team1"'
在数据库中创建一条记录
但是下面的代码不起作用(我传递了相同的参数值)
第二版代码:
SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx"
/SET "\Package.Variables[User::ConfigurationName].Properties[Value]";"' + @ConfigurationName +
'" /SET "\Package.Variables[User::Country].Properties[Value]";"' + @Country +
'" /SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";"' + @OrgDepartment_Team +
'" /SET "\Package.Variables[User::Subfix].Properties[Value]";"' + @Subfix +
'" /SET "\Package.Variables[User::TeamName].Properties[Value]";"' + @TeamName + '"'
没有错误,但是在数据库中也没有创建记录。
DTExec:程序包执行返回DTSER_SUCCESS(0)。
我将不胜感激:)
答案 0 :(得分:1)
您似乎正在使用有效的语法,但是我会提供一些建议,可能有助于解决该问题:
检查命令中使用的变量均不包含NULL值,这可能导致串联的字符串值为NULL
,您可以使用ISNULL()
解决此问题。
SELECT @ConfigurationName = ISNULL(@ConfigurationName,'') ,
@Country = ISNULL(@Country ,'') ,
@OrgDepartment_Team = ISNULL(@OrgDepartment_Team,'') ,
@Subfix = ISNULL(@Subfix ,'') ,
@TeamName = ISNULL(@TeamName,'')
我更希望引号包含在变量中而不是主字符串中。您可以使用QUOTENAME()
函数来实现:
SELECT @ConfigurationName = QUOTENAME(ISNULL(@ConfigurationName,''),'"') ,
@Country = QUOTENAME(ISNULL(@Country ,''),'"') ,
@OrgDepartment_Team = QUOTENAME(ISNULL(@OrgDepartment_Team,''),'"') ,
@Subfix = QUOTENAME(ISNULL(@Subfix ,''),'"') ,
@TeamName = QUOTENAME(ISNULL(@TeamName,''),'"')
SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx"
/SET "\Package.Variables[User::ConfigurationName].Properties[Value]";' + @ConfigurationName +
' /SET "\Package.Variables[User::Country].Properties[Value]";' + @Country +
' /SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";' + @OrgDepartment_Team +
' /SET "\Package.Variables[User::Subfix].Properties[Value]";' + @Subfix +
' /SET "\Package.Variables[User::TeamName].Properties[Value]";' + @TeamName
您可以通过在命令中添加/Rep EWIP
关键字来读取整个程序包日志:
SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx" /Rep EWIP '
/ Rep [orting]级别[; event_guid_or_name [; event_guid_or_name [...]] :(可选)。指定要报告的消息类型。级别的可用报告选项如下:
N无报告。
E错误已报告。
W警告已报告。
I报告了信息性消息。
报告了C个自定义事件。
D数据流任务事件被报告。
已报告P进度。
V详细报告
参考