Sql server 从insert获取主键
我正在尝试使用SSIS将数据从旧系统迁移到新系统。我有表Sql server 从insert获取主键,sql-server,ssis,Sql Server,Ssis,我正在尝试使用SSIS将数据从旧系统迁移到新系统。我有表TableA,TableB和OldTable。各表如下: TableA 身份证 业务类型枚举 其他 TableB 身份证 表B_ID(FK) 许可证号码 OldTable 身份证 商业型 许可证号码 如您所见,table a和table b(在新系统中)实际上是OldTable分为两个表 我的问题是,为了在表B中插入记录,我需要知道在表a中插入相应记录时分配的PrimaryKey 我原本计划在尝试将记录插入表TableB时执行查
TableA
,TableB
和OldTable
。各表如下:
TableA
- 身份证
- 业务类型枚举
- 其他
TableB
- 身份证
- 表B_ID(FK)
- 许可证号码
OldTable
- 身份证
- 商业型
- 许可证号码
table a
和table b
(在新系统中)实际上是OldTable
分为两个表
我的问题是,为了在表B
中插入记录,我需要知道在表a
中插入相应记录时分配的PrimaryKey
我原本计划在尝试将记录插入表TableB
时执行查找
,但是TableA
中没有任何存储在允许我返回的数据
有什么想法吗?听起来像是在使用一个数据流:源->拆分->两个目标(
TableA
,TableB
)
如果将流程分为两个数据流会怎么样
- 第一个简单地从
中提取并加载到OldTable
李>TableA
- 第二个——加载到
——再次从TableB
中提取,但也通过对该表进行OldTable
或Merge Join
来从Lookup
中获取相关标识值李>TableA
OldTable
的数据插入TableA
。您可以使用insert语句中的返回标识列的值
INSERT TableA (BusinessTypeEnum, Other)
OUTPUT INSERTED.ID
VALUES ('abc', 'def')
除了插入一条记录外,上面的操作将类似于选择
我应该提到的是,OUTPUT子句中有一个INTO子句可以与批插入一起使用。上面的示例是针对单个记录插入的。一种方法是创建一个存储过程来逐行执行此操作,并在包中将其作为SQL命令目标调用。每行插入(或不插入)表A,使用scope_identity()函数收集ID,然后使用FK插入表B。另一种方法是使用临时表。在一批中插入表格A,生成FK,然后将其更新回临时表格,并插入临时表格(带有派生FK)@Nick.McDermaid,您不需要;在存储过程中不需要逐行处理,因为您可以使用OUTPUT子句获取信息。也许您可以添加更详细的答案。我相信这会奏效,但我认为您需要解释如何将完整的行集转换为可用的FK