Μπορείς να το κάνεις με osql αλλά αυτό προϋποθέτει ότι θα είναι εγκατεστημένα τα client tools του SQL Server στο PC που κάνεις εγκατάσταση. Μπορεί να παρουσιαστούν διάφορα προβληματάκια που μου έρχονται πρόχειρα στο μυαλό: Είναι το osql.exe στο path; Δεν είναι στο path; Είναι εγκατεστημένο; Δεν είναι εγκατεστημένο; Θα κάνεις local install ή υπάρχει περίπτωση και για remote; Επίσης, είναι πιο δύσκολο το να ελέγξεις αν όλα πήγαν καλά, ενώ δίνοντας εντολή-εντολή τα statements μπορείς να καταλάβεις τι δεν πήγε καλά...
Λοιπόν, εδώ είναι το δείγμα. Δεν μπορώ να βρω την τελική μορφή, καθώς είχα κάνει αρκετές διορθώσεις με καλύτερο error handling και logging.
Public Sub ExecuteSql(ByVal connection As SqlConnection, ByVal sqlFile As String)
Dim sql As String = ""
Dim iCounter As Integer
Dim transaction As SqlTransaction
Dim strm As FileStream = File.OpenRead(sqlFile)
Dim reader As New StreamReader(strm)
sql = reader.ReadToEnd()
Dim regex As New Regex("^GO", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
Dim lines As String() = regex.Split(sql)
connection.Open()
Dim cmd As SqlCommand = connection.CreateCommand()
Try
cmd.Connection = connection
cmd.CommandType = CommandType.Text
Dim line As String
For iCounter = 0 To lines.Length - 1
line = lines(iCounter)
If line.Trim = "use [database_name_here]" Then
transaction = connection.BeginTransaction()
cmd.Transaction = transaction
End If
If line.Length > 0 Then
cmd.CommandText = line
cmd.CommandType = CommandType.Text
Console.WriteLine(line)
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End If
Next
Finally
cmd.Dispose()
End Try
transaction.Commit()
connection.Close()
End Sub 'ExecuteSql
Vir prudens non contra ventum mingit