2016-10-21 4 views
0

現在、1つのクエリで2つの関連するテーブルのデータを更新しようとしています。データの冗長性のためにベスト・プラクティスではないかもしれませんが、私はアプリケーション内で変更されたデータをチェックするのを避けたいと思っています。結合されたテーブルを一緒に更新すると、複数の部分の識別子をバインドできませんでした。

これらは、使用中のテーブルです:

Process (Id, Name, Description) 
FavoriteProcess (Id, Process_Id, Position, CreatedTime) 

あなたはすべてのFavoriteProcessエンティティがProcessに関連しているとProcessが複数のFavoriteProcessエンティティに表示されることがわかるように。

私はFavoriteProcessエンティティのPosition財産と同様に関連ProcessDescriptionプロパティを更新することが可能なツールを書いています。この問題のために、私はエラーを発行している次のストアドプロシージャを書いた:5関連の私は、この問題を探してみた

Msg 4104, Level 16, State 1, Procedure UpdateFavoriteProcess, Line 13 The multi-part identifier "p.Description" could not be bound.

が、どれも:クエリは、このエラーを発行している

CREATE PROCEDURE UpdateFavoriteProcess 
    -- parameters for the stored procedure 
    @Id      int, 
    @ProcessDescription  varchar(256), 
    @Position    int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- The update query 
    UPDATE fp 
    SET p.Description = @ProcessDescription, -- this line is issuing the error 
     fp.Position = @Position 
    FROM FavoriteProcess AS fp 
    INNER JOIN Process AS p ON fp.Process_Id = p.Id 
    WHERE fp.Id = @Id 
END 
GO 

SOの質問は私の問題を解決できる解決策を提供しました!私は...

  • を試してみました...括弧を入れて... []
  • を持つすべての表と列を囲む()結合文

が、私の周りにどれも任意の可能な方法で試行は成功しました。だから私はこの問題で私を助けることができる誰かに本当に感謝しています!あなたはNot Boundエラーを取得する理由です

UPDATE fp 

あなたカント書き込み

SET p.Description 

でUPDATEを起動すると

答えて

1

あなたは同じ時間

で2つのテーブルを更新するカント。

+0

ああ、私はそれがUPDATEクエリでから、テーブル2を持つことが可能だということを、いくつかの質問に読んで確信していました。私は、結合されたテーブルのデータを照会するだけで、それを更新することはできません。 – Vinzenz

1

次の2つの別々のUPDATEステートメントを使用することができます。

UPDATE FavoriteProcess 
SET Position = @Position 
WHERE Id = @Id 

UPDATE Process 
SET Description = @ProcessDescription 
WHERE Id IN (SELECT Process_Id FROM FavoriteProcess WHERE Id = @Id) 
+0

これは唯一の方法だと思います。 – Vinzenz

関連する問題