SQL 消息输出在 SSIS 中显示为错误
SQL Messages Output appearing as Errors in SSIS
因此,只要查询执行失败,我的 SSIS 包就会将来自查询执行的消息记录为错误。因此,例如我的查询有 2 个 Print 语句,并且由于某种原因查询因某些错误而失败。 SSIS 正在记录所有 2 个打印语句以及实际错误。我不希望 SSIS 包将打印消息记录为错误。我的包裹正在阅读有关 "OnError" 事件处理程序的信息。并且日志的来源设置为:System::ErrorDescription。考虑以下查询:
PRINT 'Trying to set string value to a datetime column.'
PRINT 'So i should get this error: Conversion failed when converting date and/or time from character string.'
UPDATE TempTable SET CreateDateTime = 'StringValue'
下面是来自 SQL Management Studio 的 output/Message。最后一行是实际错误,其余行都是打印语句。
Trying to set string value to a datetime column.
So i should get this error: Conversion failed when converting date and/or time from character string.
**Msg 3930, Level 16, State 1, Procedure pr_TempTable, Line 3 Conversion failed when converting date and/or time from character string.**
但是当我尝试执行 SQL 任务和 运行 此查询时,来自消息 window 的所有这三行都被 SSIS 中的 OnError 事件处理程序视为多个错误。
起初,我怀疑您实际上是在 "Print"-ing 使用 RAISERROR 语句,这是一种相当普遍的做法。
但是,在进一步研究中,我发现将 PRINT 命令包含在由同一脚本中的后续 RAISERROR 发送到调用应用程序的错误消息中似乎是标准行为。
因此,如果您不在脚本中使用 RAISERROR,SSIS 将不会将您的 PRINT 语句视为错误。但是,如果您确实使用 RAISERROR,则在 RAISERROR 之前发生的任何 PRINT 语句都将包含在引发的错误消息中。
这很奇怪而且远非直观,但这似乎是标准行为,看起来您只需要解决它。
因此,只要查询执行失败,我的 SSIS 包就会将来自查询执行的消息记录为错误。因此,例如我的查询有 2 个 Print 语句,并且由于某种原因查询因某些错误而失败。 SSIS 正在记录所有 2 个打印语句以及实际错误。我不希望 SSIS 包将打印消息记录为错误。我的包裹正在阅读有关 "OnError" 事件处理程序的信息。并且日志的来源设置为:System::ErrorDescription。考虑以下查询:
PRINT 'Trying to set string value to a datetime column.'
PRINT 'So i should get this error: Conversion failed when converting date and/or time from character string.'
UPDATE TempTable SET CreateDateTime = 'StringValue'
下面是来自 SQL Management Studio 的 output/Message。最后一行是实际错误,其余行都是打印语句。
Trying to set string value to a datetime column.
So i should get this error: Conversion failed when converting date and/or time from character string.
**Msg 3930, Level 16, State 1, Procedure pr_TempTable, Line 3 Conversion failed when converting date and/or time from character string.**
但是当我尝试执行 SQL 任务和 运行 此查询时,来自消息 window 的所有这三行都被 SSIS 中的 OnError 事件处理程序视为多个错误。
起初,我怀疑您实际上是在 "Print"-ing 使用 RAISERROR 语句,这是一种相当普遍的做法。
但是,在进一步研究中,我发现将 PRINT 命令包含在由同一脚本中的后续 RAISERROR 发送到调用应用程序的错误消息中似乎是标准行为。
因此,如果您不在脚本中使用 RAISERROR,SSIS 将不会将您的 PRINT 语句视为错误。但是,如果您确实使用 RAISERROR,则在 RAISERROR 之前发生的任何 PRINT 语句都将包含在引发的错误消息中。
这很奇怪而且远非直观,但这似乎是标准行为,看起来您只需要解决它。