更新主键起始字符
Update primary key starting character
我有一个 table student
并且它有一个主键 student_id
,student_id
被多个 table 引用。 student_id
格式为 P123X12
表格如下
- 学生(student_id是
PK
)
- audit_trail(student_id 是
FK
)
- 结果(student_id是
FK
)
- 另外 10 个 table 指的是
student_id
我在结果 table 中有 100 条记录,我想将这些记录中的 student_id 从 P123X12
更新到 D123X12
。无论如何我可以更改这些参考值吗?
根据我的评论,您可以复制学生中的数据。更改您的 FK 字段,然后从学生中删除原始记录。如果您不更改以 P 开头的所有字段,您可能需要调整 where 子句。
/* 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%'
稍微长一点的方法是将您的原始字段提取到临时 table 中,然后从那里插入。然后,您可以使用内部连接从学生中删除到临时 table 以确保您只删除您确实想要删除的行。
我有一个 table student
并且它有一个主键 student_id
,student_id
被多个 table 引用。 student_id
格式为 P123X12
表格如下
- 学生(student_id是
PK
) - audit_trail(student_id 是
FK
) - 结果(student_id是
FK
) - 另外 10 个 table 指的是
student_id
我在结果 table 中有 100 条记录,我想将这些记录中的 student_id 从 P123X12
更新到 D123X12
。无论如何我可以更改这些参考值吗?
根据我的评论,您可以复制学生中的数据。更改您的 FK 字段,然后从学生中删除原始记录。如果您不更改以 P 开头的所有字段,您可能需要调整 where 子句。
/* 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%'
稍微长一点的方法是将您的原始字段提取到临时 table 中,然后从那里插入。然后,您可以使用内部连接从学生中删除到临时 table 以确保您只删除您确实想要删除的行。