Naming Convention for SSIS Tasks — Make the Execution Log Readable at Last

An SSIS package fails, you open the execution log to find the cause — and face a tree in which the tasks don’t appear in the order they ran, but alphabetically by name. For complex packages that log is simply unreadable. The good news: a well-thought-out naming convention solves the problem completely — without any code.

The essentials up front:

  • The problem: SSIS logs tasks alphabetically by task name per container, not in execution order — in the Progress tab as well as in the Integration Services Catalog reports.
  • Numbering as a prefix brings the tasks in the log into their real execution order.
  • A type prefix (DFTSQLSCR, …) makes the task type recognizable in the purely textual log.
  • A meaningful name plus the overall syntax XXXX [YYYY] ZZZ Name makes every task name unique and self-explanatory.
  • Beyond today’s SSIS: the convention still applies via the VS 2022/2026 extension, and its principle carries over to modern ETL tools (Azure Data Factory, Fabric, dbt, Airflow).

Prerequisite: an SSIS project in Visual Studio (with the SQL Server Integration Services Projects extension). The screenshots are from Visual Studio 2017; the convention applies regardless of version.

Why SSIS Tasks Need a Naming Convention

The definition of programming guidelines and naming conventions only makes sense if the advantage outweighs the effort. One important prerequisite is identifying the benefits. Readability and maintainability of code are generally the focus when talking about naming conventions. In the case of SQL Server Integration Services (SSIS), however, another aspect comes into play: the logging of a package’s execution in the Execution Results / Progress tab in Visual Studio. The execution is logged in a tree view. For complex packages with sub packages, For Each Loop Containers, Sequence Containers, etc., the tree quickly becomes long and deep. It is hard to follow the execution order of tasks in the tree and, in case of an error, to identify the cause quickly. Who hasn’t struggled with this supposedly simple task?!

Let’s have a look behind the scene. Visual Studio orders all tasks in the Execution Result tab by the task name and not the execution order of the tasks. The following screenshot shows the execution of a rather simple package in Visual Studio 2017:

Control flow diagram in Visual Studio with two Sequence Containers whose names do not reflect the actual execution order.

Annotations:

  • There are two Sequence Containers. The names of the containers are identical except the suffix. The container with the suffix 2 is executed prior to the container with the suffix 1.
  • Both Sequence Containers contain identical Control Flow Tasks. In each container the Control Flow Task with the prefix 2 is executed prior to the Control Flow Task with the prefix 1.
  • In between both Sequence Containers you find three Script Tasks. The task names are prefixed with the letters AB and C in opposition to the execution order which is CB and A.

Both Control Flow Tasks with type of Data Flow Task are identical. The alphabetically ordered task names do not reflect the actual execution order which is OLE-DB Source prior to Count.

Two data flows with identical tasks whose names contradict the actual execution order — OLE-DB Source runs first, then Count.

Have a look at the Execution Results tab. The tasks are not ordered by the order of their execution but by their names:

Progress tab in Visual Studio: the tasks are sorted alphabetically by name, not in the order of their execution.

Any execution result of complex transformations in SSIS must appear to be not legible. Frankly, I would like to get to know Microsoft’s thoughts on that.

The above shown screenshots are taken from Visual Studio. But is the situation different when deploying and executing an SSIS Package in SQL Servers’ Integration Services Catalogs? Reports on the package executions within the Integration Services Catalogs can be opened by

right-click on project/package > Reports | Standard Reports | All Executions

In fact, the overview site of any execution orders the log entries by the task names, too.

Integration Services Catalog standard report "All Executions": in production, too, the tasks are logged by name rather than by execution order.

This leads me to the conclusion, that task names should be chosen in a way that the displayed order of executed tasks corresponds to the actual execution order of the tasks. In addition to this there are two other commonly followed naming conventions for SSIS tasks:

  1. Use a meaningful numbering of tasks according to their actual execution order
  2. Use a prefix for each task type
  3. Use meaningful task names

Numbering of tasks according to their execution order

When thinking of a meaningful numbering of task names we should distinguish Control Flow Tasks from Data Flow Tasks.

Control Flow Tasks

Using Numbers as a prefix ensures that tasks will be logged in the right order according to the order of their execution.

The numbering should support a four-digit range (numbers up to 9999). Smaller numbers should be entered with leading zeros. Don’t use consecutive numbers. Leaving gaps between two numbers allows for changing the execution order of tasks by minimizing the effort for the modification of task names through adjusting the numbering.

Of course, numbering tasks is time consuming, but the advantage outweighs the effort. The experiences made in multi developer projects prove to be beneficial when dealing with errors:

Control flow with numbered task prefixes (four digits, with gaps) that match the execution order.

The following execution result shows the execution plan of the above package. All tasks are ordered according to their task name. With that the execution log appears to be much more legible than the first version in this article:

Execution log after introducing the numbering: the tasks now appear in execution order and are readable.

Data Flow Tasks

The execution of Data Flow Tasks is normally not logged in the execution log, but it is recommended to apply a numbering convention to Data Flow Tasks, too. In fact, the convention should be extended as stated after the next screenshot.

Data flow with a two-part numbering as a prefix on every task: control flow number plus data flow number.

The first executed Control Flow Task was prefixed with the number 0110. All Data Flow tasks should be prefixed with the same number followed by a numbering for all Data Flow Tasks. This allows an unambiguous identification of any Data Flow Task in a package. When using this naming convention all Data Flow Tasks are prefixed with two numbers:

  • Control Flow number
  • Data Flow number

But in which situation proves this convention to be beneficial. In case of exceptions fired by a Data Flow Task SSIS logs the task name of the Data Flow Tasks that fired the exception. Unique names help to identify the task that has fired an exception:

Error case: the log names the unique name of the data flow task that caused the error.

Use a Prefix for Each Task Type

Each task type has its own pictogram. However, the representation of task types is limited to the size of icons which is 16×16 pixel. Moreover, a pictogram is just a visual representation. The identification of task types in an execution log requires prefixes that indicate the type of a task.

To increase the readability, it is therefore common sense that task names should be prefixed with an abbreviation depending on the task type:

  • DFT for Data Flow Task
  • SCT for Script Task
  • SQL for SQL Execute Task

The internet provides a few lists with suggestions for such abbreviations/prefixes. The following two tables contain the abbreviations/prefixes used by me.

Prefixes for Control Flow Tasks

TaskPrefix
Back Up Database TaskBACKUP
CDC Control TaskCDC
Check Database Integrity TaskCHECKDB
Data Profiling TaskDPT
Execute SQL Server Agent Job TaskAGENT
Execute T-SQL Statement TaskTSQL
History Cleanup TaskHISTCT
Maintenance Cleanup TaskMAINCT
Notify Operator TaskNOT
Rebuild Index TaskREBIT
Reorganize Index TaskREOIT
Shrink Database TaskSHRINKDB
Update Statistics TaskSTAT
For Loop ContainerFLC
Foreach Loop ContainerFELC
Sequence ContainerSEQC
ActiveX ScriptAXS
Analysis Services Execute DDL TaskASE
Analysis Services Processing TaskASP
Bulk Insert TaskBLK
Data Flow TaskDFT
Data Mining Query TaskDMQ
Execute Package TaskEPT
Execute Process TaskEPR
Execute SQL TaskSQL
Expression TaskEXPR
File System TaskFSYS
FTP TaskFTP
Message Queue TaskMSMQ
Script TaskSCR
Send Mail TaskSMT
Transfer Database TaskTDB
Transfer Error Messages TaskTEM
Transfer Jobs TaskTJT
Transfer Logins TaskTLT
Transfer Master Stored Procedures TaskTSP
Transfer SQL Server Objects TaskTSO
Web Service TaskWST
WMI Data Reader TaskWMID
WMI Event Watcher TaskWMIE
XML TaskXML

Prefixes for Data Flow Tasks

TaskPrefixTypeSupplier
ADO NET SourceADO_SRCSource
Azure Blob SourceAB_SRCSource
CDC SourceCDC_SRCSource
DataReader SourceDR_SRCSource
Excel SourceEX_SRCSource
Flat File SourceFF_SRCSource
HDFS File SourceHDFS_SRCSource
OData SourceODATA_SRCSource
ODBC SourceODBC_SRCSource
OLE DB SourceOLE_SRCSource
Raw File SourceRF_SRCSource
SharePoint List SourceSPL_SRCSource
XML SourceXML_SRCSource
AggregateAGGTransformation
AuditAUDTransformation
Balanced Data DistributorBDDTransformation
Cache TransformCCHTransformation
CDC SplitterCDCSTransformation
Character MapCHMTransformation
Conditional SplitCSPLTransformation
Copy ColumnCPYCTransformation
Data ConversionDCNVTransformation
Data Mining QueryDMQTransformation
Derived ColumnDERTransformation
DQS CleansingDQSCTransformation
Export ColumnEXPCTransformation
Fuzzy GroupingFZGTransformation
Fuzzy LookupFZLTransformation
Import ColumnIMPCTransformation
LookupLKPTransformation
MergeMRGTransformation
Merge JoinMRGJTransformation
MulticastMLTTransformation
OLE DB CommandCMDTransformation
Percentage SamplingPSMPTransformation
PivotPVTTransformation
Row CountCNTTransformation
Row SamplingRSMPTransformation
Script ComponentSCRTransformation
Slowly Changing DimensionSCDTransformation
SortSRTTransformation
Term ExtractionTEXTransformation
Term LookupTELTransformation
Union AllALLTransformation
UnpivotUPVTTransformation
ADO NET DestinationADO_DSTDestination
Azure Blob DestinationAB_DSTDestination
Data Mining Model TrainingDMMT_DSTDestination
Data Streaming DestinationDS_DSTDestination
DataReaderDestDR_DSTDestination
Dimension ProcessingDP_DSTDestination
Excel DestinationEX_DSTDestination
Flat File DestinationFF_DSTDestination
HDFS File DestinationHDFS_DSTDestination
ODBC DestinationODBC_DSTDestination
OLE DB DestinationOLE_DSTDestination
Partition ProcessingPP_DSTDestination
Raw File DestinationRF_DSTDestination
Recordset DestinationRS_DSTDestination
SharePoint List DestinationSPL_DSTDestination
SQL Server Compact DestinationSSC_DSTDestination
SQL Server DestinationSS_DSTDestination
Microsoft Dynamics 365 CE/CRM SourceCRM_SRCSourceKingswaySoft Software
Microsoft Dynamics 365 CE/CRM DestinationCRM_DSTDestinationKingswaySoft Software
Oracle Eloqua SourceELO_SRCSourceKingswaySoft Software
Oracle Eloqua DestinationELO_DSTDestinationKingswaySoft Software

Task names

Finally, task names should briefly describe what the task does. For example, Import Customer, Check Data Types, etc.

Naming Convention

All tasks (Control Flow Tasks and Data Flow Tasks) within a SSIS package should have a unique name. The following naming convention provides a rule for specifying a unique name:

XXXX [YYYY] ZZZ Name

with

XXXX

  • Numbering of Control Flow Tasks.
  • The numbering of Control Flow Tasks should support a four-digit number range (up to 9999).
  • Smaller numbers should be prefixed with leading zeros.
  • Don’t use consecutive numbers. Leaving gaps between two numbers allows for changing the execution order of tasks by minimizing the effort for the modification of task names through adjusting the numbering.

YYYY

  • Numbering of Data Flow Tasks.
  • The numbering of Data Flow Tasks contains as a prefix the number of the containing Control Flow Task with type of Data Flow (XXXX).
  • The numbering of Data Flow Tasks should support a four-digit number range (up to 9999).
  • Smaller numbers should be prefixed with leading zeros.
  • Don’t use consecutive numbers. Leaving gaps between two numbers allows for changing the execution order of tasks by minimizing the effort for the modification of task names through adjusting the numbering.

ZZZ

  • Prefix that allows identifying the type of a Control Flow or Data Flow Task.
  • Refer to the above given prefixes.

Name

  • Task names should briefly describe what the task does.

SSIS Today: Tooling Update and Context

The screenshots in this article are from Visual Studio 2017 — the convention itself has been valid ever since. What has changed is the tooling: SSIS packages are built today with the separately installed SQL Server Integration Services Projects 2022+ extension, which supports Visual Studio 2022 and 2026 and targets SQL Server versions from 2017 through 2025. The tabs (Progress / Execution Results) and the Integration Services Catalog reports have stayed the same.

Version note: The behaviour described here — tasks logged alphabetically by name rather than in execution order — is long-standing field experience (screenshots: Visual Studio 2017). Microsoft’s documentation describes the Progress tab generically as “in execution order”. If in doubt, check quickly in your SSIS version whether the sorting still applies — it doesn’t change the value of the convention either way.

Why “either way”? The three building blocks work independently of the exact sort order: a numbering makes the log scannable, a type prefix makes the task type recognizable in plain text, and a unique name allows unambiguous attribution in case of an error — no matter how the entries are arranged.

Where ETL Is Heading

SSIS remains the established on-premises ETL engine and is still maintained. For new projects, however, the focus is shifting: in the Microsoft world, Azure Data Factory and Microsoft Fabric take over cloud orchestration; in the open-source and Postgres ecosystem, dbt (transformation) and Apache Airflow (orchestration) have become established. The core idea of this article carries over directly: there, too, consistent naming of steps and models decides whether a run log stays readable.

FAQ

Why doesn’t SSIS show the tasks in execution order?

SSIS sorts the tasks in the execution log alphabetically by task name per container — in the Progress / Execution Results tab in Visual Studio as well as in the Integration Services Catalog reports. The actual execution order is irrelevant to the display. That’s exactly why a numbering prefix helps: it brings the alphabetical sort into line with the execution order.

How do I number Data Flow Tasks correctly?

Each Data Flow Task gets two four-digit numbers as a prefix: first the number of the parent Control Flow Task of type Data Flow, then its own number within the data flow. That keeps every task uniquely identifiable even in the error log. Both number ranges should leave gaps so the order can later be changed without renaming all tasks.

Which prefix do I use for which task type?

There is no official Microsoft standard — the two tables above list the common prefixes used here (DFT for Data Flow Task, SQL for Execute SQL Task, SEQC for Sequence Container, and so on). What matters is less the exact abbreviation than team-wide consistency: agree on the list once and stick to it.

Does the convention also apply in the broader SSIS context?

Yes. The naming convention is one building block of maintainable SSIS solutions, alongside logging an ETL process, the source code management of SSIS packages, and the fundamental trade-off of SSIS vs. T-SQL and how much SQL belongs in an SSIS package.