在 Google 上花费了大量时间并浏览了 Microsoft SQL Server 2008 SSIS 文档后,我终于破解了它。为自己感到骄傲。因此解决方案是:
- 在 SQL Server 商业智能开发工作室中,创建一个新的 SSIS 包。
- 创建 3 个变量,我称为mine
startDate
和. 确保它们都具有 Package 的范围级别,并确保它们的数据类型分别为和..endDate
strDataSourceSQL
Int32
Int32
String
- 在“控制流”选项卡上,将
Script Task
工具箱中的 a 拖到“控制流”窗格中。右键单击它并从弹出菜单中选择编辑。
- 在
Script
页面上,单击 右侧的省略号ReadWriteVariables
。勾选您在步骤 1 中创建的变量,user::startDate
即user::endtDate
和user::strDataSourceSQL
。您可以在General page
. 这是一个很好的做法。
- 在
Script
页面上,单击Edit Script...
按钮以显示带有一些预先编写的代码的 Visual Studio IDE 窗格。
进行以下更改。在页面顶部,您会注意到要使用的导入命名空间和类的几行。编辑代码行并确保您具有以下行:
使用系统;
使用 System.Data;
使用 Microsoft.SqlServer.Dts.Runtime;
使用 System.Data.OleDb;
转到菜单项目 > 添加参考。在 .NET 选项卡上,确保选择
Microsoft.SqlServer.DTSPipelineWrap
和Microsoft.SqlServer.DTSRuntimeWrap
归功于 DotNetMonster的提示。
在里面
公共无效主要()
方法,你会看到一条评论说// TODO: 在此处添加您的代码
我们将替换该行或添加以下代码行。顺便说一句,我使用 OLEDB 作为我的数据源和数据目的地。
//声明变量
Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100 cmParams;
System.Data.OleDb.OleDbConnection oleDbConn;
ConnectionManager cm;
Int32 strStartDate;
Int32 strEndDate;
String startDateSQL = "SELECT StartDate FROM DATE_RANGE_CONTROL";
String endDateSQL = "SELECT EndDate FROM DATE_RANGE_CONTROL";
//Declare and assign Connection manager
cm = Dts.Connections["YOUR_OLEDB_CONNECTION_MANAGER_NAME"];
//Set Connection paramters
cmParams = cm.InnerObject as Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100;
//Instantiate the Oledb connection
oleDbConn = cmParams.GetConnectionForSchema() as OleDbConnection;
分配strStartDate
和strEndDate
变量,运行我们稍后将显示的函数的结果。它确实为 OLEDB 连接提供了一个 SQL 命令。
strStartDate = (int)assignSQLCommand(startDateSQL,oleDbConn).ExecuteScalar();
strEndDate = (int)assignSQLCommand(endDateSQL, oleDbConn).ExecuteScalar();
//将SQL结果集的值赋给startDate和endDate变量
Dts.Variables["startDate"].Value = strStartDate;
Dts.Variables["endDate"].Value = strEndDate;
声明一个名为dataSourceSQL
string 类型的变量并将您的 DataSource SQL 代码分配给它。将日期范围值替换为上述变量的值。对我来说,代码如下:
String dataSourceSQL = "SELECT COLUMN1,COLUMN2,COLUMN3,TRANSACTION_DATE
FROM SOURCE_DATABASE_TABLE
WHERE TRANSACTION_DATE BETWEEN '"+Dts.Variables["startDate"].Value +"' AND '"+Dts.Variables["endDate"].Value+"'";
然后将值分配dataSourceSQL
给您的strDataSourceSQL
包变量
Dts.Variables["strDataSourceSQL"].Value = dataSourceSQL ;
在方法的大括号之外public void Main()
,添加我们之前讨论过的以下函数。
公共 OleDbCommand assignSQLCommand(字符串 SqlCommand,OleDbConnection oledbconn)
{
返回新的 System.Data.OleDb.OleDbCommand(SqlCommand, oledbconn);
}
转到菜单构建 > 构建 [脚本名称]。保存并关闭脚本页面。最后,剩下的就是创建一个数据源任务。转到Data Flow
选项卡,将 OLE DB DB 源拖到窗格中。右键单击 OLE DB 源并选择编辑。在 Connections Manager 页面上,选择您的 OLE DB 连接管理器,然后Data access mode
选择SQL command from variable
. 在变量名中选择user::strDataSourceSQL
。只要您将脚本任务设置为在数据流之前运行,工作就完成了!