Voici une façon possible d'exporter les tables de différentes structures vers un fichier plat en utilisant Script Task
. Cet exemple va exporter deux tables contenant différents champs et données vers un fichier plat en utilisant script Task. Afin d'exporter les données, vous pouvez utiliser la fonction DataReader
au lieu d'utiliser le DataGrid
. Il pourrait y avoir d'autres façons de procéder.
Processus étape par étape :
- Créez trois tables nommées
dbo.TablesList
, dbo.Source1
y dbo.Source2
en utilisant les scripts donnés sous SQL scripts section.
- Remplir les tableaux
dbo.TablesList
, dbo.Source1
et `dbo.Source2`` avec les données montrées dans la capture d'écran #. 1 .
- Dans l'onglet
Connection manager
créer un OLE DB connection
nommé SQLServer pour se connecter à l'instance de SQL Server comme indiqué dans la capture d'écran #. 2 .
- Dans le paquet, créez 4 variables comme indiqué dans la capture d'écran #. 3 .
- Dans le flux de contrôle, placez un
Execute SQL Task
, a Foreach Loop Container
y un Script Task
au sein de la Foreach loop container
comme indiqué dans la capture d'écran #. 4 .
- Configurer le
Execute SQL task
comme indiqué dans les captures d'écran #. 5 et # 6 .
- Configurer le
Foreach Loop container
comme indiqué dans les captures d'écran suivantes 7 et # 8 .
- Remplacer la méthode Main à l'intérieur de la tâche script par le code donné sous la section
Script Task Code
.
- Capture d'écran # 9 montre l'exécution du paquet.
- Screenshots # 10 - # 12 montrer les fichiers exportés depuis SSIS en utilisant le code de la tâche script.
J'espère que cela vous aidera.
SQL scripts :
CREATE TABLE [dbo].[Source1](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [varchar](20) NOT NULL,
[ItemName] [varchar](50) NOT NULL,
CONSTRAINT [PK_Source1] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Source2](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Country] [varchar](20) NOT NULL,
[StateProvince] [varchar](50) NOT NULL,
CONSTRAINT [PK_Source2] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TablesList](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TableName] [varchar](50) NOT NULL,
[FilePath] [varchar](255) NOT NULL,
CONSTRAINT [PK_Tables] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
script Code de tâche : (Utilisez le code donné ci-dessous pour remplacer la méthode Main() dans votre tâche script)
VB Code de la méthode Main() qui peut être utilisée dans SSIS 2005 and above
:
Public Sub Main()
Dim varCollection As Variables = Nothing
Dts.VariableDispenser.LockForRead("User::TableName")
Dts.VariableDispenser.LockForRead("User::FileName")
Dts.VariableDispenser.LockForRead("User::Delimiter")
Dts.VariableDispenser.GetVariables(varCollection)
Dim fileName As String = varCollection("User::FileName").Value.ToString()
Dim query As String = "SELECT * FROM " & varCollection("User::TableName").Value.ToString()
Dim delimiter As String = varCollection("User::Delimiter").Value.ToString()
Dim writer As StreamWriter = Nothing
Dim connection As OleDbConnection = New OleDbConnection(Dts.Connections("SQLServer").ConnectionString)
Dim command As OleDbCommand = Nothing
Dim reader As OleDbDataReader = Nothing
Try
If File.Exists(fileName) Then
File.Delete(fileName)
End If
connection.Open()
command = New OleDbCommand(query, connection)
reader = command.ExecuteReader()
If reader.HasRows Then
writer = New System.IO.StreamWriter(fileName)
Dim row As Integer = 0
While reader.Read()
Dim header As Integer = 0
Dim counter As Integer = 0
Dim fieldCount As Integer = reader.FieldCount - 1
If row = 0 Then
While header <= fieldCount
If header <> fieldCount Then
writer.Write(reader.GetName(header).ToString() & delimiter)
Else
writer.WriteLine(reader.GetName(header).ToString())
End If
header += 1
End While
End If
While counter <= fieldCount
If counter <> fieldCount Then
writer.Write(reader(counter).ToString() & delimiter)
Else
writer.WriteLine(reader(counter).ToString())
End If
counter += 1
End While
row += 1
End While
End If
Catch ex As Exception
Throw ex
Finally
connection.Close()
writer.Close()
End Try
Dts.TaskResult = ScriptResults.Success
End Sub
Capture d'écran n° 1 :
Capture d'écran n°2 :
Capture d'écran n°3 :
Capture d'écran n°4 :
Capture d'écran n°5 :
Capture d'écran n°6 :
Capture d'écran n°7 :
Capture d'écran n°8 :
Capture d'écran n°9 :
Capture d'écran n°10 :
Capture d'écran n° 11 :
Capture d'écran n°12 :