To review, asynchronous outputs have a different buffer type than the inputs on the same component. There is a disconnect between the data flowing in on an input and the data flowing out of an asynchronous output. Asynchronous outputs are often called blocking outputs, but that's not entirely accurate. Asynchronous outputs tend to be blocking, but they don't have to be. In fact, it is possible that they produce more data than what the inputs provide. When you think of asynchronous outputs, instead of thinking about whether it blocks or how much data it produces, think "new data" or "new buffer type." Essentially, asynchronous outputs represent newly generated data. Some make a distinction between partially asynchronous and asynchronous outputs. Where the data flow engine is concerned, there is no difference. The distinction is merely conceptual. Note Often, people refer to transformations as asynchronous or synchronous. But, that's not an entirely accurate way to classify components. In fact, it's possible to have a transform that has both synchronous and asynchronous outputs. Strictly speaking, there are no synchronous or asynchronous components, only synchronous and asynchronous outputs. However, you'll still hear folks, even SSIS team members, refer to components as synchronous or asynchronous. But, you know what they really mean. Making a Script Output AsynchronousAs mentioned earlier, you should check the SynchronousInputID to ensure it had the ID of an input. If you change the SynchronousInputID to zero, you've changed the output to an asynchronous output. It's that simple. When you do this, the Script Component generates a new template function. As you might expect, it is the same template function it generates for the Source, CreateNewOutputRows. So, transforms with asynchronous outputs are really like a destination and a source slapped together. The input is like a destination, and the output is like a source, generating new data. Because you've already seen a source and a destination, you already know how to write transforms with asynchronous outputs. In fact, another way to think about it is that sources are components with no inputs and only asynchronous outputs. |