SQL Server中的大容量插入
我已经创建了SSIS包,可以将数据从csv导入到我的表中,我正在尝试通过sql命令(更具体地说,是bulk insert语句)复制SSIS,您能帮我吗 csv文件属性: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 =
您可以使用
批量插入
用于以下目的:
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
不幸的是,这在我的情况下不起作用。也许,应该提供其他属性…不确定。。。