我创建了一个SSIS包,从csv文件中导入数据到我的表中。现在我想通过SQL命令来复制这个SSIS包,具体来说是使用bulk insert语句。你能帮忙吗?
csv文件的属性如下图所示:
csv文件的属性如下图所示:
![enter image description here](https://istack.dev59.com/JgDRM.webp)
![enter image description here](https://istack.dev59.com/ON4C3.webp)
Bulk Insert
来实现这个目的:BULK INSERT table_name
FROM 'c:\test.csv'
WITH
(
FIRSTROW= 3,
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlClient
Imports System.Math
Imports System.IO
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Windows.Forms
代码
Public Sub PerformBulkCopy(ByVal tableName As String, ByVal sourceConnection As SqlConnection, ByVal destinationConnection As SqlConnection)
Dim dtSource As DataTable
dtSource = New System.Data.DataTable()
dtSource = GetSourceDataTable(tableName, sourceConnection)
Using sbc As New SqlBulkCopy(destinationConnection)
sbc.DestinationTableName = tableName
sbc.WriteToServer(dtSource)
End Using
End Sub
Public Function GetSourceDataTable(ByVal tableName As String, ByVal sourceConnection As SqlConnection) As DataTable
Dim cmd As New SqlCommand("uspGetDataForAchival")
cmd.Parameters.Add(New SqlParameter("@TableName", tableName))
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = sourceConnection
Dim dap As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
dap.Fill(ds)
Return ds.Tables(0)
End Function
Public Sub Main()
Dim tableName As String = Dts.Variables("User::CurrentTable").Value.ToString()
Dim sourceConnection As SqlConnection
Dim destinationConnection As SqlConnection
Try
' Retrieve the reference to the managed connection'
Dim cmSource As ConnectionManager
cmSource = Dts.Connections("ADOSourceConnection")
sourceConnection = DirectCast(cmSource.AcquireConnection(Dts.Transaction), System.Data.SqlClient.SqlConnection)
Dim cmDestination As ConnectionManager
cmDestination = Dts.Connections("ADOACIConnection")
destinationConnection = DirectCast(cmDestination.AcquireConnection(Dts.Transaction), System.Data.SqlClient.SqlConnection)
Dim destinationConnectionString As String = destinationConnection.ConnectionString
MessageBox.Show(destinationConnectionString)
PerformBulkCopy(tableName, sourceConnection, destinationConnection)
'Release Connection'
cmSource.ReleaseConnection(sourceConnection)
cmDestination.ReleaseConnection(destinationConnection)
'Success'
Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
Dim exceptionVariable As Microsoft.SqlServer.Dts.Runtime.Variables = Nothing
Dts.VariableDispenser.LockOneForWrite("User::ScriptException", exceptionVariable)
exceptionVariable("User::ScriptException").Value = ex.Message
exceptionVariable.Unlock()
Dts.Events.FireError(-1, "Task Name", ex.Message, String.Empty, 0)
Dts.TaskResult = Dts.Results.Failure
End Try
End Sub
StreamReader file = new StreamReader(bulk_data_filename);
CsvReader csv = new CsvReader(file, true,',');
SqlBulkCopy copy = new SqlBulkCopy(conn);
copy.DestinationTableName = tablename;
copy.WriteToServer(csv);