2013-10-03 316 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)

對不起所有所有表必須被重新接種。當我創建登臺表時,他們保持身份值。