Можно ли декомпилировать и прочитать код пакета служб SSIS? - PullRequest
2 голосов
/ 29 мая 2019

Я работаю над проектом, который принадлежит другому человеку. Он создал задание для обновления группы полей в нескольких таблицах на SQL-сервере. Эта работа была основана на пакете служб SSIS. Теперь у меня есть файл DTSX и отключенная работа. Когда я пытался включить задание после изменения старых учетных данных в файле DTSX, я получал странные ошибки. Я хочу увидеть код, стоящий за пакетом служб SSIS, и узнать, как кодируется процесс обновления. Есть ли способ сделать это?

Ответы [ 4 ]

2 голосов
/ 30 мая 2019

Создайте новое решение и импортируйте в него файл DTSX.Visual Studio просто служит прославленным редактором XML для пакетов служб SSIS.

2 голосов
/ 30 мая 2019

Я хочу увидеть код, стоящий за пакетом служб SSIS, и узнать, как кодируется процесс обновления

Как уже упоминалось в других ответах, файлы dtsx являются файлами XML, их можно просто открыть.эти файлы, используя текстовый редактор для проверки кода, или вы можете просто создать новый проект служб Integration Services с помощью Visual Studio и добавить пакет, чтобы проверить его поток управления.

Я добавил свой собственный ответ, чтобы перечислить некоторые из моих сообщений, связанных с этой проблемой, поскольку он может дать вам некоторые идеи:

1 голос
/ 30 мая 2019

В зависимости от того, с какой версией SSIS вы работаете, вы можете посмотреть на XML пакета (F7, если у вас открыт пакет) и найти блок, подобный следующему

<DTS:Executable
  DTS:refId="Package\Execute SQL Task"
  DTS:CreationName="Microsoft.ExecuteSQLTask"
  DTS:Description="Execute SQL Task"
  DTS:DTSID="{93D895E6-A316-4718-9C97-4A5652ABD28C}"
  DTS:ExecutableType="Microsoft.ExecuteSQLTask"
  DTS:LocaleID="-1"
  DTS:ObjectName="Execute SQL Task"
  DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2017; © 2017 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1"
  DTS:ThreadHint="0">
  <DTS:Variables />
  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStatementSource="UPDATE T SET Count = Count+1 FROM dbo.Table AS T;" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>
</DTS:Executable>

В этой задаче используется «жестко закодированный» оператор, связанный с сущностью SQLTask:SqlStatementSource.

Однако, если задача «Выполнение SQL» управляется переменной, вы увидите блок XML в видеследующим образом.Там нет фактического запроса, поэтому вам нужно найти коллекцию <Variables>, которая определяет User::MyQueryVariable, и тогда у вас будет только значение времени разработки, а не значение времени выполнения

  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStmtSourceType="Variable"
      SQLTask:SqlStatementSource="User::MyQueryVariable" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>

Наконецдля полноты, если бы разработчик указал File Source, вы бы увидели что-то вроде этого

  <DTS:ObjectData>
    <SQLTask:SqlTaskData
      SQLTask:Connection="{CEE71D69-1F9F-46FA-A22F-C9EB60670EA0}"
      SQLTask:SqlStmtSourceType="FileConnection"
      SQLTask:SqlStatementSource="FileConnectionSource" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" />
  </DTS:ObjectData>

Затем вам нужно будет найти определение для FileConnectionSource также в XML.

1 голос
/ 30 мая 2019

Файлы DTSX - это просто файлы XML. Просто переименуйте в xml и откройте в редакторе.

Запрос представляет собой строку, которая создается путем конкатенации строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...