更改主键主要详细信息表SQL

时间:2014-06-19 07:42:46

标签: sql sql-server sql-server-2012

我有主要详细信息表

MasterTBL

ID   Name  Age
12   name1  15
544  name2  15
2544 name3  15

DetailsTBL

ID session MasterID
1  Test    12
2  Test2   12
3  test3   544
4  test4   2544
5  test5   12
6  test6   544

是否可以在没有数据冲突的情况下更改主表和详细信息表的ID 就像:

MasterTBL

ID   Name  Age
1    name1  15
2    name2  15
3    name3  15

DetailsTBL

ID session MasterID
1  Test    1
2  Test2   1
3  test3   2
4  test4   3
5  test5   1
6  test6   2

我使用此功能在主

中执行此操作
row_number() over (order by id)

但我该怎么做才能更新细节

2 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE @Temp TABLE (TempID INT IDENTITY(1,1), ID INT)

INSERT INTO @Temp (ID)
SELECT ID FROM MasterTBL
SET @Total = @@ROWCOUNT

DECLARE @Count INT = 1
DECLARE @ID INT

WHILE @Count <= @Total
BEGIN

    SET @ID = (SELECT ID FROM @Temp WHERE TempID = @Count)

    -- Update Details Table
    UPDATE DetailsTBL SET MasterID = @Count WHERE MasterID = @ID

    -- Update Master Table
    UPDATE MasterTBL SET ID = @Count WHERE ID = @ID

    SET @Count = @Count + 1
END

首先需要更新详细信息表,然后更新主表。

答案 1 :(得分:0)

如果可以,请执行以下操作:

在您的MasterTBL表格中添加另一列以保存您当前ID的值,并将其命名为有意义的内容,例如OLDID。将当前ID值复制到此列,然后您可以使用提到的row_number函数更新ID字段。

ID   Name  Age OldID
1   name1  15 12
2  name2  15 544
3 name3  15 2544

然后你要做的就是使用OldID列将DetailsTBL加入MasterTBL以获取新的ID值以更新DetailsTBL表。