[英]Bulk insert in SQL Server
我創建了SSIS包,從csv導入數據到我的表,我試圖通過sql命令重現SSIS,更具體地說,使用批量插入語句,你能幫忙嗎?
csv文件屬性:
您可以使用Bulk Insert
來實現此目的:
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);
Followng沒有使用批量插入命令 - 但在.Net
使用SqlBulkCopy
類進行SSIS
腳本任務
以下是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
碼
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.