1

Transact-SQL とストアド プロシージャはあまり得意ではありません。その手順がデータをどこに保存するか知りたいですか?

ALTER PROCEDURE [dbo].[InsurerCascoConditionsSave]
     @InsurerID int
    ,@Data xml
AS
BEGIN

    declare @DocHandle int
    EXEC sp_xml_preparedocument @DocHandle OUTPUT, @Data

    MERGE InsurerCascoConditions AS target
    USING (SELECT InsurerConditionID, @InsurerID, CascoConditionID, Value
            FROM OPENXML (@DocHandle, '/DocumentElement/Table1', 2)
            WITH (InsurerConditionID int, CascoConditionID int, Value nvarchar(max)))
        AS source (InsurerConditionID, InsurerID, CascoConditionID, Value)
    ON (target.ID = isnull(source.InsurerConditionID, 0))
    WHEN MATCHED THEN 
        UPDATE SET Value = source.Value
    WHEN NOT MATCHED THEN   
        INSERT (InsurerID, CascoConditionID, Value)
        VALUES (source.InsurerID, source.CascoConditionID, source.Value);

    EXEC sp_xml_removedocument @DocHandle
END
4

2 に答える 2

1

@psurが言ったように、InsurerCascoConditionsは変更されるテーブルです。MERGEを使用すると、3つの個別のステートメントを実行する代わりに、単一のステートメントの一部としてINSERT / UPDATE/DELETEを実行できます。

あなたの声明を分解する...

MERGE InsurerCascoConditions AS target--これはこの操作のターゲットテーブルです

USING.....-これはデータの発信元です

ON....-ソースデータがターゲットデータにどのように関連するかを定義します(たとえば、IDの一致)

WHEN MATCHED THEN UPDATE....-上記の条件に基づいて、SOURCEのレコードがTARGETのレコードと一致するON場合、これは、一致したターゲットレコードのどのフィールドを定義し、一致したソースレコードのどのフィールドで更新するかを定義します。

WHEN NOT MATCHED THEN INSERT....-上記の条件に基づいて、SOURCEのレコードがTARGETのレコードと一致しないON場合、これにより、ターゲットテーブルに新しい行が挿入されます。

于 2013-01-10T11:09:13.423 に答える
1

InsurerCascoConditionsテーブルへ。

これはステートメントによって行われます。MSDNMERGEで読むことができます。一般的には状態次第でororになります。構文から簡単に読み取ることができます。INSERTUPDATEDELETE

于 2013-01-10T11:01:56.923 に答える