如果我手动创建数据库和表,然后使用查询添加数据流,并删除数据库,则可以实现目标,但这似乎不是一个干净的解决方案。
如果有更好的方法创建临时暂存数据库,并在数据流中查询,请告诉我。
USE Sora;
GO
CREATE PROCEDURE dbo.PopulateTempTable
AS
BEGIN
SET NOCOUNT ON;
IF OBJECT_ID('TempDB..##tmpStateProvince') IS NOT NULL
DROP TABLE ##tmpStateProvince;
CREATE TABLE ##tmpStateProvince
(
CountryCode nvarchar(3) NOT NULL
, StateCode nvarchar(3) NOT NULL
, Name nvarchar(30) NOT NULL
);
INSERT INTO ##tmpStateProvince
(CountryCode, StateCode, Name)
VALUES
('CA', 'AB', 'Alberta'),
('US', 'CA', 'California'),
('DE', 'HH', 'Hamburg'),
('FR', '86', 'Vienne'),
('AU', 'SA', 'South Australia'),
('VI', 'VI', 'Virgin Islands');
END
GO
Create a table named dbo.StateProvince that will be used as the destination table to populate the records from temporary table. Use the below create table script to create the destination table.
USE Sora;
GO
CREATE TABLE dbo.StateProvince
(
StateProvinceID int IDENTITY(1,1) NOT NULL
, CountryCode nvarchar(3) NOT NULL
, StateCode nvarchar(3) NOT NULL
, Name nvarchar(30) NOT NULL
CONSTRAINT [PK_StateProvinceID] PRIMARY KEY CLUSTERED
([StateProvinceID] ASC)
) ON [PRIMARY];
GO
将连接KIWI\SQLSERVER2008R2.Sora上的属性RetainSameConnection设置为True。
在包内单击鼠标右键,然后单击变量以查看变量窗格。创建以下变量。 在包范围SO_5631010中,创建一个名为PopulateTempTable的新变量,数据类型为String,并将变量设置为EXEC dbo.PopulateTempTable的值。 在包范围SO_5631010中,创建一个名为FetchTempData的新变量,数据类型为String,并将变量设置为SELECT CountryCode,StateCode,Name FROM ##tmpStateProvince的值。
将Execute SQL Task拖放到控制流选项卡上。双击Execute SQL Task以查看Execute SQL Task Editor。 在Execute SQL Task Editor的General页面上,执行以下操作。 将名称设置为Create and populate temp table 将连接类型设置为OLE DB 将连接设置为KIWI\SQLSERVER2008R2.Sora 从SQLSourceType中选择Variable 从SourceVariable中选择User::PopulateTempTable 单击“确定”
将Data Flow Task拖放到控制流选项卡上。将Data Flow Task重命名为Transfer temp data to database table。将绿色箭头从Execute SQL Task连接到Data Flow Task。
双击数据流任务以切换到数据流选项卡。将OLE DB Source拖放到数据流选项卡上。双击OLE DB Source以查看OLE DB Source编辑器。 在OLE DB Source编辑器的连接管理器页面上,执行以下操作。 从OLE DB连接管理器中选择KIWI\SQLSERVER2008R2.Sora 从数据访问模式中选择来自变量的SQL命令 从变量名称中选择User::FetchTempData 单击列页面执行包。控制流程显示执行成功。
在数据流选项卡中,您会注意到该包成功处理了6行。本文早期创建的存储过程已将6行插入临时表中。
在SQL Server Management Studio(SSMS)中执行查询select * from dbo.StateProvince,以查找成功插入表格的6行。 数据应与存储过程中的行匹配。
上面的示例说明了如何在包内创建和使用临时表。