具有 SQL Server Integration Services 包步骤的 SQL 代理作业失败,并显示以下消息:
以用户身份执行:DOMAIN\SQLAGENTACCOUNT。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 13.0.4259.0 版权所有 (C) 2016 Microsoft。版权所有。指定了无效的报告选项。只允许使用 E、W、I、C、D、P、V 和 N。命令行参数无效。步骤失败。
具有 SQL Server Integration Services 包步骤的 SQL 代理作业失败,并显示以下消息:
以用户身份执行:DOMAIN\SQLAGENTACCOUNT。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 13.0.4259.0 版权所有 (C) 2016 Microsoft。版权所有。指定了无效的报告选项。只允许使用 E、W、I、C、D、P、V 和 N。命令行参数无效。步骤失败。
如果作业步骤上的配置选项卡用于设置包参数并且其中一个参数(例如密码)包含需要分隔的字符(例如单引号),则可能会出现此错误。在作业步骤对话框中修改参数时,参数将包含在作业步骤的命令行中,并且不会分隔单引号或双引号。这将导致无效(或更糟,错误)的命令行。
可能的解决方案是:
删除作业步骤,创建新作业步骤,并直接在 SSIS 项目上设置包参数(在 SSMS 中,在 Integration Services、SSISDB、SSIS 包、项目下)。作业步骤的命令行不会尝试传递参数,但包执行引擎会直接读取参数并更好地处理特殊字符。
可能(但我没有测试过)在特殊字符之前包含反斜杠分隔符。因此,对于 My'Pa$$word 的密码,您可以改用 My\'Pa$$word。
从参数中删除有问题的特殊字符(例如,如果它是密码,则生成一个不带任何引号的新密码)。
我不知道所有字符会导致这个问题,但我知道单引号会导致它,我认为假设双引号也会导致它是安全的。
您可以通过运行以下查询来查看 SQL 代理将执行什么命令:
/Par
默认情况下,该命令将包含几个for$ServerOption::LOGGING_LEVEL
和$ServerOption::SYNCHRONIZE
,但如果修改了作业步骤中的任何参数,您还将在命令行中看到它们,例如:请注意,对于密码字段,密码以纯文本形式存储在 sysjobsteps 中,因此这绝对不是您想要在作业步骤中更改的内容。
可能还有其他问题可能导致无效命令错误,欢迎任何人编辑此答案以添加任何其他问题。