SSIS一次将具有起始范围的递增ID插入多个表
SSIS Inserting incrementing ID with starting range into multiple tables at a time
是否有一种或几种可靠的变体来解决简单的任务?
我有许多 XML 文件,它们将转换为 6 SQL 表(通过 SSIS)。
在这个过程结束之前,我需要在每个表中添加一个新的(实际上 - 所有表都是通用的)列(或字段)。
此列表示具有分配范围和 +1 递增步长的 ID。喜欢 (350000, 1)
是的,我知道如何在 SSMS SQL 阶段解决它。但我需要在 SSIS 的 pre-SQL 转换 lvl 时的解决方案。
我确定应该有众所周知的模式解决方案来处理它。
我要试试这个。需要说明的是,关于你的问题,我没有太多信息可以继续。
我处理过的大多数 XML 文件都有一个公共元素(我们称之为客户)和一对多属性(可以是发票、地址、电子邮件、联系人等)。
因此您的 table 结构将围绕客户呈星形分布。
所以你的 XML 将有一个 1 对 1 的核心客户信息,可以加载到单个主 table,并将有发票数组信息和地址数组等等。这些数组将是它们自己的 tables,将客户引用为键。
我想你是在问如何创建那个密钥。
首先加载客户数据,return 加载其他 table 时用作外键的标识列。
我发现在脚本组件中这样做最容易。我只会解释如何取回钥匙。我个人会在 C# 中处理整个过程(反序列化和所有)。
将此添加到使用块:
Using System.Data.OleDB;
根据脚本任务/组件所在的位置,将其添加到您的主处理或行处理中:
string SQL = @"INSERT INTO Customer(CustName,field1, field2,...)
values(?,?,?,...); Select cast(scope_identity() as int);";
OleDBCommanad cmd = new OleDBCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = SQL;
cmd.Parameters.AddWithValue("@p1",[CustName]);
...
cmd.Connection.Open();
int CustomerKey = (int)cmd.ExecuteScalar(); //ExecuteScalar returns the value in first row / first column which in our case is scope_identity
cmd.Connection.Close();
现在您可以将 CustomerKey 用于所有其他 tables。
是否有一种或几种可靠的变体来解决简单的任务? 我有许多 XML 文件,它们将转换为 6 SQL 表(通过 SSIS)。 在这个过程结束之前,我需要在每个表中添加一个新的(实际上 - 所有表都是通用的)列(或字段)。
此列表示具有分配范围和 +1 递增步长的 ID。喜欢 (350000, 1) 是的,我知道如何在 SSMS SQL 阶段解决它。但我需要在 SSIS 的 pre-SQL 转换 lvl 时的解决方案。 我确定应该有众所周知的模式解决方案来处理它。
我要试试这个。需要说明的是,关于你的问题,我没有太多信息可以继续。
我处理过的大多数 XML 文件都有一个公共元素(我们称之为客户)和一对多属性(可以是发票、地址、电子邮件、联系人等)。
因此您的 table 结构将围绕客户呈星形分布。
所以你的 XML 将有一个 1 对 1 的核心客户信息,可以加载到单个主 table,并将有发票数组信息和地址数组等等。这些数组将是它们自己的 tables,将客户引用为键。
我想你是在问如何创建那个密钥。
首先加载客户数据,return 加载其他 table 时用作外键的标识列。
我发现在脚本组件中这样做最容易。我只会解释如何取回钥匙。我个人会在 C# 中处理整个过程(反序列化和所有)。
将此添加到使用块:
Using System.Data.OleDB;
根据脚本任务/组件所在的位置,将其添加到您的主处理或行处理中:
string SQL = @"INSERT INTO Customer(CustName,field1, field2,...)
values(?,?,?,...); Select cast(scope_identity() as int);";
OleDBCommanad cmd = new OleDBCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = SQL;
cmd.Parameters.AddWithValue("@p1",[CustName]);
...
cmd.Connection.Open();
int CustomerKey = (int)cmd.ExecuteScalar(); //ExecuteScalar returns the value in first row / first column which in our case is scope_identity
cmd.Connection.Close();
现在您可以将 CustomerKey 用于所有其他 tables。