我想使用存储过程来更新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,存储它,并在下次更新时使用它?如果这是唯一的方法,我该怎么做?
答案 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语法。