由于你使用了我作为问题答案提供的例子:。 我以同样的榜样从多个桌子出口数据,以使用SSIS的标本的不同平坦文档,并修改了数据,以管理所储存的程序。
似乎没有任何问题。 确保它与你努力做到的一致。 这个例子使用<编码>SSIS 2005,SQL服务器2008 R2
数据库。
www.un.org/Depts/DGACM/index_spanish.htm 循序渐进的过程:
建立三个表格,即dbo。 表sList, dbo.Source1 and dbo.Source2。 用一些抽样数据编制表格。 此外,还建立了两个称为 d的储存程序。 SP1 and dbo. SP2. 下面有文字说明,这些任务是制作表格和储存程序。
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,
[SPName] [varchar](50) NOT NULL,
[FilePath] [varchar](255) NOT NULL,
CONSTRAINT [PK_Tables] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
INSERT INTO dbo.TablesList (FilePath, SPName) VALUES
( F:TempItem_Details.txt , SP1 ),
( F:TempCountry_StateProvince.txt , SP2 );
GO
INSERT INTO dbo.Source1 (ItemNumber, ItemName) VALUES
( 34534 , Keyboard ),
( 24312 , Mouse ),
( 78555 , Monitor );
GO
CREATE PROCEDURE [dbo].[SP1]
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM dbo.Source1
END
GO
CREATE PROCEDURE [dbo].[SP2]
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM dbo.Source2
END
GO
下表中的数据将如下表所示。
关于SSIS一揽子计划,创建了一个与SQ服务器的链接管理员。
关于SSIS一揽子计划,产生了4个变量,即Delimiter
,FileName
,RunSP
和SPsList
。 此外,还安排了“Executekul”任务、“Foreach Loop”集装箱以及“控制流动”的代号任务,详情如下:
没收“Executekou”的任务,以挑选以下两个屏幕显示的储存程序清单。
如以下两张屏幕所示,将Foreach Loop集装箱通过在变异的SPsList中储存的结晶进行 lo。
在《古典》任务栏目中,在“设计”栏目上点击了VSTA编辑。
替换VB。 NET代码如下。 守则颁布后,关闭了联邦航空局编辑,以挽救这些变化。
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.IO
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
Public Sub Main()
Dim varCollection As Variables = Nothing
Dts.VariableDispenser.LockForRead("User::FileName")
Dts.VariableDispenser.LockForRead("User::Delimiter")
Dts.VariableDispenser.LockForRead("User::RunSP")
Dts.VariableDispenser.GetVariables(varCollection)
Dim fileName As String = varCollection("User::FileName").Value.ToString()
Dim query As String = "EXEC " & varCollection("User::RunSP").Value.ToString()
Dim delimiter As String = varCollection("User::Delimiter").Value.ToString()
Dim writer As StreamWriter = Nothing
Dim connection As OleDbConnection = New OleDbConnection(Dts.Connections("Learn2008R2").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()
writer = New System.IO.StreamWriter(fileName)
Dim row As Integer = 0
Dim header 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
If reader.HasRows Then
While reader.Read()
Dim counter As Integer = 0
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
End While
End If
Catch ex As Exception
Throw ex
Finally
connection.Close()
writer.Close()
End Try
Dts.TaskResult = Dts.Results.Success
End Sub
End Class
F:执行一揽子计划之前的夹子内容。 脚本是空的。
成功实施一揽子方案的情况见以下屏幕。
Folder path F:Temp现在使用个人储存程序SP1和SP2提供的数据,在包裹中包含由文字任务产生的两个档案。
Contents of the files are shown in the below screenshots. The file contents are pipe delimited and you can notice the data matches with the table data shown in the earlier screenshot.
Hope that helps.