2013-10-03 45 views
0

我正在使用数据Manimpulation Languague(DML)执行基本上将记录应用于临时表的INSERT INTO(带有select),然后必须将 级联到子表。INSERT INTO using SELECT

所有的子表中插入从父表的身份进入,我想他们使用临时表的标识值
表是除了名称和架构

相同的临时表的问题该守则

DECLARE @FK_Value 

INSERT INTO temp.tbl_staging_parent 
     (value1 
     , value2) 
SELECT   
     value1 
     ,value2     
FROM   
    dbo.tbl_parent 
WHERE 
    parent_id = @ParentID 


SET @FK_Value = SCOPE_IDENTITY() 

-- No Problems thus far 
-- Here is the issue 

INSERT INTO temp.tbl_staging_child 
     (FK 
     , value2) 
SELECT   
     value1 
     ,value2    
FROM   
    dbo.tbl_child 
WHERE 
    FK = @FK_Value 

---我不包括主键,它是复制在PK ---从原来的表时,我需要使用临时表的身份

如果有人有一些输入,请让我知道。

+0

我不能发布实际的代码是敏感的。 :( – Moojjoo

+1

查看['OUTPUT'](http://technet.microsoft.com/en-us/library/ms177564(v = sql.100).aspx)子句。 – HABO

回答

0
INSERT INTO temp.tbl_staging_child 
     (FK 
     , value2) 
SELECT   
     value1 -- this should be @FK_Value 
     ,value2    
FROM   
    dbo.tbl_child 
WHERE 
    FK = @FK_Value -- this should probably be FK = @ParentId 
+0

为什么不把身份和增加1我没有设置这个值,子表上的PK都具有标识值......但是它们又一次处理从PRODUCTION表到STAGING表的数据,当他们需要使用IDENTITY VALUES – Moojjoo

+0

我不' t知道;根据我对你的问题的理解和稍微模糊的例子,这就是解决方案 子表'FK'字段引用父表的'ID'字段,所以你想插入登台父ID(这是'@ FK_Value'作为'staging_child'作为'FK'字段,这个解决方案可以完成。另外,当你从生产'child'表中选择时,你需要使用生产父ID来选择生产子记录,是'@ ParentId'。您现有的示例代码使用@FK_Value,它是分段父ID标识值。 – Moho

+0

dbcc checkident('tables',reseed,0) 对不起所有的表都必须重新调整。当我创建登台表时,他们保持身份值。 – Moojjoo

0

DBCC CHECKIDENT( '表',补种,0)

对不起所有所有表必须被重新接种。当我创建登台表时,他们保持身份值。