是否有一种或某些可靠的变体来解决简单的任务?我有许多XML文件(将通过SSIS转换为6个SQL表)。在此过程结束之前,我需要向每个表中添加一个新的(实际上,对所有表都通用)列(或字段)。
此列代表具有分配范围和+1递增步长的ID。赞(350000,1)是的,我知道如何在SSMS SQL阶段解决它。但是我需要在SSIS的SQL转换前lvl解决方案。我确信应该有众所周知的模式解决方案来处理它。
我要对此采取行动。只是为了清楚起见,我在您的问题中没有太多要继续的信息。
我处理过的大多数XML文件都有一个具有一对多属性(可以是发票,地址,电子邮件,联系人等)的公共元素(我们称之为客户)。
因此您的桌子结构在顾客周围会有点星形。
因此,您的XML将具有一对一的核心客户信息,可以加载到单个主表中,并且具有发票的数组信息和地址的数组等。这些数组将是它们自己的表,引用客户为关键。
我想您是在问如何创建密钥。
首先加载客户数据,并在加载其他表时返回标识列以用作外键。
我发现在脚本组件中这样做最容易。我只会解释如何找回钥匙。我个人将使用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用于所有其他表。