2016-12-01 39 views
0

我有一個表student,它有一個主鍵student_id,student_id跨多個表引用。 student_id格式是P123X12更新主鍵起始字符

表是如下

  • 學生(student_id數據被PK
  • AUDIT_TRAIL(student_id數據是FK
  • 結果(student_id數據是FK
  • 更多10表其是參考student_id

我在結果表中有100條記錄,我想更新這些記錄的從P123X12D123X12的student_id。無論如何,我可以改變這些參考值嗎?

+0

您是否可以使用新ID複製您的學生數據,然後更改您的外鍵,然後最終將您的原始值放入學生? –

+0

所有記錄都以P開頭,我從「D」開始更改100個記錄,因此ID不會重複。 – piechuckerr

+0

不,但其他一切都會,我會添加一個解釋的答案,因爲評論太長。 –

回答

1

根據我的評論,你可以複製學生的數據。改變你的FK字段,然後刪除學生的原始記錄。你可能會想調整where子句,如果你不改變,與一個P.

/* Duplicate our data in student */ 
INSERT INTO student (student_id, field2, field3, field4) 
SELECT 
'D' + SUBSTRING(student_id,2,LEN(student_id)-1) 
,field2 
,field3 
,field4 
FROM student 
WHERE student_id LIKE 'P%' 

/* Update our other tables */ 
UPDATE audit_trail 
SET student_id = 'D' + SUBSTRING(student_id,2,LEN(student_id)-1) 
WHERE student_id LIKE 'P%' 

UPDATE Result 
SET student_id = 'D' + SUBSTRING(student_id,2,LEN(student_id)-1) 
WHERE student_id LIKE 'P%' 

/* Delete the original rows from student */ 
DELETE student 
WHERE student_id LIKE 'P%' 

稍長的方式開始將原來的場提取到一個臨時表,並從那裏插入各個領域。然後,您可以從內部加入臨時表的學生中刪除,以確保您只刪除了您確實想要的行。

+0

那裏有一些非ANSI SQL。哪個dbms? – jarlh

+0

@jarlh是好點,這個答案是針對SQL Server –