Hello "dm_unseen" and thanks for that suggestion.
Matt Whitfield (5/28/2009)
I don't really see the major benefit over using the SqlBulkCopy class here, which is also backwards compatible 2000 up.
A minor benefit that I can see is that you don't need to have a 'loading table' in which data is placed before being transformed by a stored proc if that transformation is necessary.
But it's a really minor benefit to break compatibility from 2000/2005.
Hello Matt. Regarding the similarity to BULK INSERT, SqlBulkCopy, and other methods, I would say that:
1) Using the IEnumerable streaming method that I described here provides the greatest benefit when doing transformations in the application layer. I realize that my example code was simplistic and did not show a transformation but this technique is more focused on the "sending" of the data than the "receiving" of it. And in these cases, bulk insert/copy operations do not address the issue of doing anything more than straight reads of the source data.
2) As far as using TVPs in general goes, regardless of the full-streaming feature when using IEnumerable they do, in my opinion, provide a much cleaner interface than using a staging or loading table. True, using them is not compatible with prior versions of SQL Server but many people do not need such compatibility. Unless there is a specific reason not to do so I believe that you should use all features available in a product. I have mainly worked at Software as a Service companies where we host the application and do not need to worry about what version of the DB (or even what vendor) a customer might have.
SQL# - https://SQLsharp.com/
( SQLCLR library of over 340 Functions and Procedures)
Sql Quantum Lift - https://SqlQuantumLift.com/
( company )
Sql Quantum Leap - https://SqlQuantumLeap.com/
( blog )