我有一个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
这是正确的解决方法吗?
答案 0 :(得分:0)
您的DBA是否允许您更改外键,以便它可以级联更新?如果是这样,您只需更新您的主键,它也会自动更新所有外键值。
ALTER TABLE dbo.yourtable ADD CONSTRAINT
FK_yourkey FOREIGN KEY
(
yourcolumn
) REFERENCES dbo.yourprimarytable
(
yourcolumn
) ON UPDATE CASCADE
如果可以这样做,则必须删除并重新创建密钥,否则无法使用ALTER语句更改密钥。