从Select语句更新FK Guid

时间:2011-08-09 16:17:25

标签: sql-server stored-procedures select

假设我有两个表,Tool和IOPoint,两者都使用GUID作为PK。 Tool有一列是IOPoint表的GUID FK列。

当我在程序中更改IOPoint时,我不想更新该值,而是从IOPoint中的条目列表中更新FK(IOPoint表是不变的)。

因此,我必须根据2个唯一列从IOPoint进行SELECT,并将该行的GUID更新到Tool表的FK列中。

VAR myGUID = SELECT IOP.ID 
    FROM IOPoint IOP
    WHERE IOP.A = @A AND IOP.B=@B

UPDATE Tool T
    SET T.IOPoint_1 = myGuid
    WHERE T.ID=@ID

由于程序中使用了大量的IOPoints,因此每次db更新时我必须执行大约30次查询,因此我需要找到最有效的方法,这样做有望避免性能问题。

感谢任何帮助。谢谢大家!

1 个答案:

答案 0 :(得分:2)

我认为您可以在单个SQL语句中执行SELECT和UPDATE,如下所示。

假设表在dbo模式下,查询使用键列ID连接表dbo.Tool和dbo.IOPoint,并按列A和B过滤行。然后,它将表IOPoint中的ID值更新为表格工具中的IOPoint_1列。

我希望这就是你要找的东西。

UPDATE      T
SET         T.IOPoint_1 = IOP.ID
FROM        dbo.Tool    T
INNER JOIN  dbo.IOPoint IOP
ON          IOP.ID      = T.ID
WHERE       IOP.A       = @A
AND         IOP.B       = @B