无法确定存储过程在何处保存数据

时间:2013-01-10 11:00:10

标签: sql-server tsql stored-procedures

在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

2 个答案:

答案 0 :(得分:1)

InsurerCascoConditions表。

MERGE语句完成,您可以在MSDN上阅读。通常,它会根据条件生成INSERTUPDATEDELETE。可以从语法中轻松阅读。

答案 1 :(得分:1)

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

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

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

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

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

WHEN MATCHED THEN UPDATE .... - 如果SOURCE中的记录与TARGET中基于上述ON条件的记录匹配,则定义匹配目标记录中的哪些字段,以更新为匹配的源记录中的哪些字段

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