Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中的大容量插入_Sql_Sql Server_Csv_Bulk - Fatal编程技术网

SQL Server中的大容量插入

SQL Server中的大容量插入,sql,sql-server,csv,bulk,Sql,Sql Server,Csv,Bulk,我已经创建了SSIS包,可以将数据从csv导入到我的表中,我正在尝试通过sql命令(更具体地说,是bulk insert语句)复制SSIS,您能帮我吗 csv文件属性: 您可以使用批量插入用于以下目的: BULK INSERT table_name FROM 'c:\test.csv' WITH ( FIRSTROW= 3, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n' ) 您可以使用这段代码 StreamReader file =

我已经创建了SSIS包,可以将数据从csv导入到我的表中,我正在尝试通过sql命令(更具体地说,是bulk insert语句)复制SSIS,您能帮我吗

csv文件属性:


您可以使用
批量插入
用于以下目的:

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

您可以使用这段代码

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

下面的命令不是使用大容量插入命令,而是在
.Net
中为
SSIS
脚本任务使用
SqlBulkCopy

以下是
脚本任务
,用于在SSIS脚本任务中使用批量复制方法将数据从一个表复制到它的历史数据库(在另一台服务器中)。它在SSIS中使用ADO连接

导入名称空间

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

不幸的是,这在我的情况下不起作用。也许,应该提供其他属性…不确定。。。