2014-01-23 134 views
1

我已經創建了從csv將數據導入到我的表的SSIS包,我試圖通過sql命令重新生成SSIS,更具體地說,使用批量插入語句,您能幫忙嗎?在SQL Server中批量插入

CSV文件屬性:

enter image description here

enter image description here

回答

3

可以使用Bulk Insert爲宗旨:

BULK INSERT table_name 
FROM 'c:\test.csv' 
WITH 
(
    FIRSTROW= 3, 
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
) 
+0

不幸的是,這並不在我的情況下工作。也許,應提供其他屬性...不確定... – dmitry

0

您可以使用這段代碼

StreamReader file = new StreamReader(bulk_data_filename); 
CsvReader csv = new CsvReader(file, true,','); 
SqlBulkCopy copy = new SqlBulkCopy(conn); 
copy.DestinationTableName = tablename; 
copy.WriteToServer(csv); 
0

Followng沒有使用BULK INSERT命令 - 但使用.NetSqlBulkCopySSIS腳本任務

以下是script task使用內部SSIS批量複製的方式從一個表將數據複製到它的歷史數據庫(在另一臺服務器上)腳本任務。它在SSIS中使用ADO Connection

導入命名空間

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 

CODE

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