使用存储过程更新多个表

时间:2011-08-09 15:31:16

标签: sql-server-2008 stored-procedures

我想使用存储过程来更新db中的多个表。每个表都有一个GUID作为PK,表之间有FK。

例如,一个表是带有列ID(guid)的“Tool”,另一个表是带有ID作为guid的“Type”。工具中有一个名为“TYPE_ID”的列,它是表格类型的FK,其中存储了Type的Guid。我想先更新Tool表,然后再根据FK更新Type表。

UPDATE Tool
    SET Name=@Name, [Enabled]=@Enabled, TestMode=@TestMode, SerialNumber=@SerialNumber, 
        Andon=@Andon, ChimeZone=@ChimeZone, Number=@ToolNumber
    WHERE ID=@ID

Update Type
    SET Type=@Type
    WHERE Tool.ID=@ID AND
        Tool.TYPE_ID=Type.ID

我知道这个代码对于第二次更新是不正确的,但这是我希望能够做到这一点的要点。有没有办法不必选择FK Guid,存储它,并在下次更新时使用它?如果这是唯一的方法,我该怎么做?

2 个答案:

答案 0 :(得分:1)

像这样编写第二个更新,将Tool表加入Type表:

UPDATE ty
    SET Type = @Type
    FROM Tool to
        INNER JOIN Type ty
            ON to.TYPE_ID = ty.ID
    WHERE to.ID = @ID

答案 1 :(得分:1)

实际上你可以UPDATE FROM子句:

UPDATE Type
SET Type=@Type
FROM Tool INNER JOIN TYPE 
    ON Tool.TYPE_ID=Type.ID
    WHERE Tool.ID=@ID AND

请参阅http://msdn.microsoft.com/en-us/library/ms177523.aspx了解完整的UPDATE语法。