Mein Kollege Robert macht mich auf den Artikel "SQL Server 2008 Table Valued Parameters Performance" von Scott Zurolo aufmerksam. Hier wird eine hausgemachte Lösung mittels XML als Übergabeparameter der Lösung mittels Table Valued Parameters gegenüber gestellt. Irgendwie klar, dass die TVPs besser sind. Man muss sich kostenlos registrieren, um den Artikel lesen zu können.
Früher nutzten wir immer ganz normale Tabellen in die wir die Menge an Sätzen reinschrieben, dabei wurde für alle zusammengehörigen Sätze eine gemeinsame Set-ID vergeben. Der Stored-Procedure wurde dann diese ID als Parameter mitgegeben. Bei weniger als hundert Datensätzen ist das schnell und elegant. Bei mehr als 6000 nicht mehr praktikabel, weil dann durch den Einfügevorgang die ganze Tabelle exklusiv gesperrt wird. Hier dürften die TVPs helfen.
Sehr schön ist auch die Aufstellung bei Microsoft "Table-Valued Parameters". Hier ist auch eine Gegenüberstellung zum BULK-INSERT.
Da ich selber noch nicht mit TVPs gearbeitet habe, kann ich nicht viel beisteuern. Ich könnte mir aber denken, dass es problematisch ist, dass man einen benutzerdefinierten Datentypen (UDT) anlegen muss. Wenn man den Typ beim CREATE-PROCEDURE wie beim DECLARE "on the fly" definieren könnte, dann wäre es sicher einfacher. So aber muss man bei einer Schnittstellenänderung der Prozedur gleich den UDT mit ändern.
Zmm Thema:
http://www.insidesql.org/blogs/christoph_ingenhaag/2010/09/03/table-value-parameters-tvp-und-kein-passendes-client-api-was-nun
Viele Grüße
Christoph Ingenhaag