Ich hatte das Problem, dass ich mit meinem SQL-Server daheim Daten auf dem SQL-Server der Wirkanwendung (gehostetes Webprojekt) aktualisieren musste. Meine erste Idee war natürlich (Replikation etc kamen nicht in Frage, da es der Zeilserver nicht unterstützt):

1:INSER INTO DestTable
2:SELECT col1, col2
3:FROM SourceTable


Diese Idee hatte ich ziemlich schnell verworfen. Die ausführung des Scripts dauerte sagenhafte 3:47 Stunden. Für diese Zeit wäre die Website down gewesen. Daraufhin habe ich viele Ideen gehabt und wieder verworfen. Das einzige was ist wusste ist, dass mir das Wort BULK weiterhilft. Dann bin ich auf das SqlBulkCopy-Objekt im Namespace System.Data.SqlClient gestoßen. Mit folgenden Skript dauerte dann das aktualisieren dann nur noch 6,5 Minuten für vier sehr große Tabellen. Diese Zeit ist dann wohl meinem DSL 3000 geschuldet.

1:   Private Sub UpdateLiveTable(ByVal sTablename As String)
2: 'Daten aus der Quelldatentabelle laden
3: Dim daSource As New SqlDataAdapter(String.Format("SELECT * FROM {0}", sTablename), _sqlConnSource)
4: Dim dtSource As New DataTable
5: daSource.Fill(dtSource)
6:
7: 'Löschen aller Daten der Zieltabelle (optional)
8: Dim scDelete As New SqlCommand(String.Format("DELETE FROM {0}", sTablename), _sqlConnDestination)
9: _sqlConnDestination.Open()
10: scDelete.ExecuteNonQuery()
11: _sqlConnDestination.Close()
12:
13: 'Daten in die Zieltabelle kopieren
14: Dim sbkDestination As New SqlClient.SqlBulkCopy(_sqlConnDestination)
15: sbkDestination.BulkCopyTimeout = 2400 'Timeout setzen, da der Import je nach Datenmenge dauern kann
16: sbkDestination.DestinationTableName = sTablename 'Name der Zieltabelle angeben
17: _sqlConnDestination.Open()
18: sbkDestination.WriteToServer(dtSource) 'Hier werden die Daten geschrieben
19: _sqlConnDestination.Close()
20: End Sub