Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从insert获取主键_Sql Server_Ssis - Fatal编程技术网

Sql server 从insert获取主键

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时执行查

我正在尝试使用SSIS将数据从旧系统迁移到新系统。我有表
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