2013-01-10 93 views
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 
+1

MERGE保險公司CAScoConditions AS **目標** –

回答

1

轉至InsurerCascoConditions表。

這是通過MERGE聲明完成的,你可以在MSDN上看到它。一般情況下,根據條件,它會生成INSERTUPDATEDELETE。它可以很容易從語法中讀取。

+1

...和DELETE也是如此。 –

+0

好的...但是,爲什麼你不能選擇數據表格表格(它返回0行..但是我知道必須有東西..) –

+0

@HamletHakobyan很明顯是的,謝謝。 – psur

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 .... - 如果源中的記錄不是根據上述ON條件在TARGET中匹配一條記錄,這會在目標表中插入一個新行

+0

感謝您的明確解釋! –