2016-02-17 34 views
-1

Table1包含工作訂單並且Table2包含安裝程序。我想在表1中爲工作訂單3906的表2插入一條記錄。表索引使得Table1GUID = Table2GUID。目前Table1GUID對於3906是NULL,因爲Table2中沒有對應的記錄,所以我猜我需要爲Table1GUID生成NEWID(),然後在Table2中插入新記錄,使兩個表中的記錄具有相同的GUID?使用TSQL,我如何在Table1中的現有記錄中插入Table2中的NEW記錄並生成NEWID

下面是拋出錯誤Msg 547 UPDATE語句與FOREIGN KEY約束衝突。如何在Table1中創建NEWID並將其插入到Table2中?

UPDATE Document SET Table1GUID = NEWID() WHERE WONumber = '3906' 

下面2中哪個最適合在Table2中創建記錄?

INSERT INTO Table2 (Table2GUID) 
SELECT Table1GUID FROM Table1 
WHERE Table1.WOnumber = '3906' 

INSERT INTO Table2 (Table2GUID) 
SELECT Table1GUID FROM Table1 
INNER JOIN Table2 ON Table2GUID = Table1GUID 
WHERE Table1.WOnumber = '3906' 
+0

我們不知道你的外鍵結構,所以它是很難肯定地說。但是你發佈的第二個帖子根本沒有任何意義。您正在插入到Table2中,因此您無法創建該行,因此無法加入。不清楚你想要做什麼,你也可以看看OUTPUT子句。我懷疑這可能是你想要的。 –

+0

記錄存在於表1(工單3096)中,但尚未分配安裝人員(表2)。我需要在Table2中創建一個鏈接(即相同的GUID)的新記錄以便在工作訂單的Table1中記錄3906 – user1636620

+0

如果需要在插入Table1時完成此操作,我建議使用OUTPUT。如果需要稍後完成,則可以使用查詢從Table1(第一個示例)獲取guid的值。這有幫助嗎? –

回答

0

由於列存儲NULL,你Table2加入不有相應的行已經沒有任何意義。嘗試添加您已經提到一個過濾謂詞與newid()替換NULL值:

set @new_id = newid() 

INSERT INTO Table2 (Table2GUID) 
SELECT @new_id 
FROM Table1 t1 
WHERE t1.WOnumber = '3906' 
    and t1.Table1GUID is NULL 

UPDATE t1 SET 
    Table1GUID = @new_id 
FROM Table1 t1 
WHERE t1.WOnumber = '3906' 
    and t1.Table1GUID is NULL 

,如果這些變化haveto被多記錄,您將需要一些其他的辦法

相關問題