2016-11-20 7 views
0

以下のシナリオを正しく管理する方法がわかりません。TSQLのJunctionTableからの更新/削除

私は私のリストテーブル内の任意のレコードは1を割り当てることができるように私は、私のカテゴリー&リストのテーブル間の多対多の関係のためのジャンクションテーブルを使用している3つのテーブルカテゴリー、リスト、ジャンクション

を持っていますカテゴリテーブルから多数のカテゴリを選択します。

正しく挿入する方法を理解しました。今私の苦境は更新です。

ユーザがリストを新しいカテゴリに更新したい場合、私のコードはJunctionTableの既存のレコードを削除し、新しいもので置き換える必要があります。どのようにすればそれを実現するSQL文を書くことができますか?

これは、私がリスティングを追加するときに発生する2つの挿入ステートメントです。

INSERT INTO BND_Listing_testing 
(Company,Doors,Address,Address2,City,Region,Country,PostalCode,Lat,Long,Phone,Fax,Website,Description,Actualized,Verified,IMG1,IMG2,IMG3,IMG4,DateAdded) 
VALUES 
('[Company]','[Doors]','[Address]','[Address2]','[City]','[Region]','[Country]','[PostalCode]','[Lat]','[Long]','[Phone]','[Fax]','[Website]','[Description]','[Actualized]','[Verified]','[Image1]','[Image2]','[Image3]','[Image4]','[DateAdded]') 

select scope_identity() 

私は次のクエリ

DECLARE @CatIDStr VARCHAR(100) = '[CatID]',@CatID VARCHAR(100) = '' 

WHILE LEN(@CatIDStr) > 0 
BEGIN 

    IF CHARINDEX(',',@CatIDStr) = 0 
    BEGIN 
     SET @CatID = @CatIDStr 
     SET @CatIDStr = '' 
    END 
    ELSE 
    BEGIN 
    SELECT @CatID = SUBSTRING(@CatIDStr,0,CHARINDEX(',',@CatIDStr))           
    SELECT @CatIDStr=SUBSTRING(@CatIDStr,CHARINDEX(',',@CatIDStr)+1,LEN(@CatIDStr)) 
    END 

    INSERT INTO BND_ListingJunction_testing (Junc_LID,Junc_CatID) 
    Values ('[ScopedLID]',@CatID) 

END 
+1

トリガーを使用しますか? https://msdn.microsoft.com/en-us/library/ms178110.aspx – DVT

+0

@DVT提案をお寄せいただきありがとうございます。私はそのページを読んでいます。 – UserSN

答えて

2

使用トランザクションのトークン[ScopedLID]で上記のクエリのアイデンティティを格納しています。そのトランザクション内で、指定されたリストのジャンクション表からすべての行を最初に削除し、2番目にリストとカテゴリーの選択された組み合わせの新しい行を追加します。

+0

@rd_neilsen私はどこかで見たことがある例のページを持っていますか? – UserSN

+1

あなたのコードに直接関係する例はありませんが、本当に必要なのは、上の2つのブロックのコードの間にdeleteコマンドを追加するだけです: "BND_ListingJunction_testing where Junc_LID = ScopedLID;"からの削除このdeleteステートメントとトランザクションでジャンクション・テーブルにデータを挿入するコードをラップするだけで、データの損失を防ぐことができます。 –

関連する問題