在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
答案 0 :(得分:1)
到InsurerCascoConditions
表。
由MERGE
语句完成,您可以在MSDN上阅读。通常,它会根据条件生成INSERT
或UPDATE
或DELETE
。可以从语法中轻松阅读。
答案 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
条件的记录不匹配,则会在目标表中插入新行