2017-02-20 3 views
0

Я использую BIML для создания пакетов SSIS, а один раздел пакета касается ошибок. Я использую команду Execute SQL Task, которая вызывает хранимую процедуру для регистрации данных об ошибках в базе данных, а хранимая процедура ожидает параметр @Comments, в котором содержится информация об описании ошибки и другой пользовательской информации.Как использовать системную переменную System :: ErrorDescription в построителе выражений

Я пытаюсь создать переменную ERROR_DETAILS и использовать выражение для создания значения для @Comments Param.

<Parameters> 
    <Parameter Name="ParentPkgID" DataType="Int32">0</Parameter> 
</Parameters> 

<Variables> 
    <Variable Name="TableName" DataType="String"> 
     tblEmployee 
    </Variable> 
    <Variable Name="Error_Details" DataType="String" EvaluateAsExpression="true"> 
     &quot;Package execution failed, Error details :: &quot; + @[System::ErrorDescription] 
    </Variable> 
</Variables> 

Проблема заключается в создании пакета терпит неудачу, когда я использую приведенный выше код, чтобы создать переменную, я понимаю, System :: ErrorDescription не доступен в редакторе выражений, но каковы мои варианты здесь.

Как использовать некоторые системные переменные, которые доступны только в определенном контексте в коде BIML.

Большое спасибо за рассмотрение моего вопроса. Пожалуйста, предложите решение.

ответ

5

Это связано с ограничением в SSIS, и разработчик SSDT даст вам аналогичную ошибку, если вы попытаетесь использовать вышеприведенное выражение.

SSIS только делает переменные System :: ErrorDescription и System :: ErrorCode доступными в контексте определенных типов обработчиков событий, таких как OnError.

Вы можете изменить свой пакет, чтобы создать обработчик событий в задаче ExecuteSQL, получить в нем описание ошибки, а затем обработать его с помощью вызова хранимой процедуры из обработчика события. Ниже приведен пример кода минимальной выборки, который будет построен, как ожидалось:

<Biml xmlns="http://schemas.varigence.com/biml.xsd"> 
    <Packages> 
     <Package Name="Package1"> 
      <Tasks> 
       <Dataflow Name="DataflowTask1"> 
        <Events> 
         <Event Name="OnError" EventType="OnError"> 
          <Variables> 
           <Variable Name="Error_Details" DataType="String" EvaluateAsExpression="true">&quot;Package execution failed, Error details :: &quot; + @[System::ErrorDescription] </Variable> 
          </Variables> 
         </Event> 
        </Events> 
       </Dataflow> 
      </Tasks> 
     </Package> 
    </Packages> 
</Biml> 
+0

Спасибо, Скотт очень полезен. В конце я создал задачу Expression внутри обработчика событий, чтобы назначить требуемое значение переменной Error_Details. –

Смежные вопросы