SQL-更新表中的主键

时间:2018-07-02 18:02:57

标签: sql-server

我有一个SQL表,该表使用Web应用程序中表单的ID作为外键。当应用程序用户首次创建请求时,我们会为该请求分配一个临时ID,然后另一个服务会将我们的数据库更新为具有真实ID。我创建了一个日志记录实用程序来跟踪应用程序的用户和服务操作,但是我需要创建一个存储过程来更新表中的所有记录,其中临时ID为真实ID。因为它是外键,所以我不能调用UPDATE,所以我想到了创建一个临时表,其中所有行都带有临时ID,然后将这些详细信息插入具有真实ID的主表中,然后删除所有带有tempID的记录,然后删除我的临时表。  像这样:

@tempID VARCHAR(20), @realID VARCHAR(20)
--create a temp table
CREATE TABLE #tempTable
( fieldA VARCHAR(max), fieldB int, id VARCHAR(20))

INSERT INTO #tempTable
  SELECT fieldA, fieldB, id FROM myTable WHERE id=@tempID

INSERT INTO myTable
  SELECT fieldA, fieldB, @realId FROM #tempTable

DELETE FROM myTable WHERE id=@tempID

If(OBJECT_ID('#tempTable') Is Not Null)
Begin
    Drop Table #tempTable
End

这是正确的解决方法吗?

1 个答案:

答案 0 :(得分:0)

您的DBA是否允许您更改外键,以便它可以级联更新?如果是这样,您只需更新您的主键,它也会自动更新所有外键值。

ALTER TABLE dbo.yourtable ADD CONSTRAINT
    FK_yourkey FOREIGN KEY
    (
    yourcolumn
    ) REFERENCES dbo.yourprimarytable
    (
    yourcolumn
    ) ON UPDATE  CASCADE

如果可以这样做,则必须删除并重新创建密钥,否则无法使用ALTER语句更改密钥。