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

InsurerCascoConditions餐桌。

它是通过声明完成的,你可以在MSDNMERGE上阅读它。一般来说,它会根据条件制造或或。它可以很容易地从语法中读取。INSERTUPDATEDELETE

于 2013-01-10T11:01:56.923 回答
1

正如@psur 所说, InsurerCascoConditions 是要修改的表。MERGE 允许您将 INSERT/UPDATE/DELETE 作为单个语句的一部分执行,而不是执行 3 个单独的语句。

打破你的陈述......

MERGE InsurerCascoConditions AS target-- 这是此操作的目标表

USING..... - 这是数据的来源

ON.... -- 定义源数据与目标数据的关系(例如,在 ID 上匹配)

WHEN MATCHED THEN UPDATE.... -- 如果 SOURCE 中的一条记录根据上述ON条件匹配 TARGET 中的一条记录,这将定义匹配的目标记录中的哪些字段,以使用匹配的源记录中的哪些字段进行更新

WHEN NOT MATCHED THEN INSERT.... -- 如果 SOURCE 中的记录与 TARGET 中的记录不匹配,则基于上述ON条件,这会在目标表中插入新行

于 2013-01-10T11:09:13.423 回答